From 64eb6fed494d9cedb6c05ffabc43d76849a65d5f Mon Sep 17 00:00:00 2001 From: dibarbet Date: Fri, 23 Aug 2024 23:01:48 +0000 Subject: [PATCH 001/100] Update main version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index caef03ac9..d62265b7f 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.45", + "version": "2.46", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 77133ade61314b3b7793a1e8ca7bedbc06364292 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 26 Aug 2024 14:04:57 +1000 Subject: [PATCH 002/100] Don't use VS Code document versions anywhere --- .../src/csharp/csharpProjectedDocument.ts | 6 ------ .../csharpProjectedDocumentContentProvider.ts | 4 ++-- .../src/document/razorDocumentSynchronizer.ts | 20 +++---------------- .../razorDocumentHighlightProvider.ts | 2 +- src/razor/src/hover/razorHoverProvider.ts | 2 +- src/razor/src/html/htmlProjectedDocument.ts | 6 ------ .../htmlProjectedDocumentContentProvider.ts | 2 +- .../src/projection/IProjectedDocument.ts | 1 - src/razor/src/projection/projectionResult.ts | 1 + src/razor/src/razorLanguageFeatureBase.ts | 1 + 10 files changed, 10 insertions(+), 35 deletions(-) diff --git a/src/razor/src/csharp/csharpProjectedDocument.ts b/src/razor/src/csharp/csharpProjectedDocument.ts index 980faf277..d74c0bb25 100644 --- a/src/razor/src/csharp/csharpProjectedDocument.ts +++ b/src/razor/src/csharp/csharpProjectedDocument.ts @@ -19,7 +19,6 @@ export class CSharpProjectedDocument implements IProjectedDocument { private resolveProvisionalEditAt: number | undefined; private ProvisionalDotPosition: Position | undefined; private hostDocumentVersion: number | null = null; - private projectedDocumentVersion = 0; public constructor(public readonly uri: vscode.Uri) { this.path = getUriPath(uri); @@ -29,10 +28,6 @@ export class CSharpProjectedDocument implements IProjectedDocument { return this.hostDocumentVersion; } - public get projectedDocumentSyncVersion(): number { - return this.projectedDocumentVersion; - } - public get length(): number { return this.content.length; } @@ -153,7 +148,6 @@ export class CSharpProjectedDocument implements IProjectedDocument { } private setContent(content: string) { - this.projectedDocumentVersion++; this.content = content; } } diff --git a/src/razor/src/csharp/csharpProjectedDocumentContentProvider.ts b/src/razor/src/csharp/csharpProjectedDocumentContentProvider.ts index fd38669eb..229497899 100644 --- a/src/razor/src/csharp/csharpProjectedDocumentContentProvider.ts +++ b/src/razor/src/csharp/csharpProjectedDocumentContentProvider.ts @@ -29,7 +29,7 @@ export class CSharpProjectedDocumentContentProvider implements vscode.TextDocume return this.onDidChangeEmitter.event; } - public async provideTextDocumentContent(uri: vscode.Uri) { + public provideTextDocumentContent(uri: vscode.Uri) { const razorDocument = this.findRazorDocument(uri); if (!razorDocument) { // Document was removed from the document manager, meaning there's no more content for this @@ -46,7 +46,7 @@ export class CSharpProjectedDocumentContentProvider implements vscode.TextDocume } const content = `${razorDocument.csharpDocument.getContent()} -// ${razorDocument.csharpDocument.projectedDocumentSyncVersion}`; +// ${razorDocument.csharpDocument.hostDocumentSyncVersion}`; return content; } diff --git a/src/razor/src/document/razorDocumentSynchronizer.ts b/src/razor/src/document/razorDocumentSynchronizer.ts index 78e6fe75a..d98274662 100644 --- a/src/razor/src/document/razorDocumentSynchronizer.ts +++ b/src/razor/src/document/razorDocumentSynchronizer.ts @@ -41,22 +41,10 @@ export class RazorDocumentSynchronizer { const ehdv = expectedHostDocumentVersion; this.logger.logVerbose( `${logId} - Synchronizing '${documentKey}': - Currently at ${projectedDocument.hostDocumentSyncVersion}, synchronizing to version '${ehdv}'. - Current host document version: '${hostDocument.version}' - Current projected document version: '${projectedDocument.projectedDocumentSyncVersion}'` + Currently at ${projectedDocument.hostDocumentSyncVersion}, synchronizing to version '${ehdv}'.'` ); } - if (hostDocument.version !== expectedHostDocumentVersion) { - if (this.logger.verboseEnabled) { - this.logger.logVerbose( - `${logId} - toHostDocumentVersion and hostDocument.version already out of date.` - ); - } - - // Already out-of-date. Allowing synchronizations for now to see if this actually causes any issues. - } - const context: SynchronizationContext = this.createSynchronizationContext( documentKey, projectedDocument, @@ -84,7 +72,7 @@ export class RazorDocumentSynchronizer { const projectedTextDocument = await vscode.workspace.openTextDocument(projectedDocument.uri); const projectedTextDocumentVersion = this.getProjectedTextDocumentVersion(projectedTextDocument); - if (projectedDocument.projectedDocumentSyncVersion !== projectedTextDocumentVersion) { + if (projectedDocument.hostDocumentSyncVersion !== projectedTextDocumentVersion) { if (this.logger.verboseEnabled) { this.logger.logVerbose( `${logId} - Projected text document not in sync with data type, waiting for update... @@ -162,7 +150,6 @@ export class RazorDocumentSynchronizer { logIdentifier: this.synchronizationIdentifier, timeoutId, toHostDocumentVersion, - hostDocumentVersion: hostDocument.version, cancel: (reason) => { for (const reject of rejectionsForCancel) { reject(reason); @@ -210,7 +197,7 @@ export class RazorDocumentSynchronizer { } for (const context of synchronizationContexts) { - if (context.projectedDocument.projectedDocumentSyncVersion === projectedTextDocumentVersion) { + if (context.projectedDocument.hostDocumentSyncVersion === projectedTextDocumentVersion) { if (this.logger.verboseEnabled) { const li = context.logIdentifier; const ptdv = projectedTextDocumentVersion; @@ -269,7 +256,6 @@ interface SynchronizationContext { readonly projectedDocument: IProjectedDocument; readonly logIdentifier: number; readonly toHostDocumentVersion: number; - readonly hostDocumentVersion: number; readonly timeoutId: NodeJS.Timer; readonly projectedDocumentSynchronized: () => void; readonly onProjectedDocumentSynchronized: Promise; diff --git a/src/razor/src/documentHighlight/razorDocumentHighlightProvider.ts b/src/razor/src/documentHighlight/razorDocumentHighlightProvider.ts index cd2c49561..8507979f8 100644 --- a/src/razor/src/documentHighlight/razorDocumentHighlightProvider.ts +++ b/src/razor/src/documentHighlight/razorDocumentHighlightProvider.ts @@ -46,7 +46,7 @@ export class RazorDocumentHighlightProvider continue; } - if (document.version !== remappedResponse.hostDocumentVersion) { + if (projection.hostDocumentVersion !== remappedResponse.hostDocumentVersion) { // This highlight result is for a different version of the text document, bail. continue; } diff --git a/src/razor/src/hover/razorHoverProvider.ts b/src/razor/src/hover/razorHoverProvider.ts index 16c974248..fa6f1aa97 100644 --- a/src/razor/src/hover/razorHoverProvider.ts +++ b/src/razor/src/hover/razorHoverProvider.ts @@ -48,7 +48,7 @@ export class RazorHoverProvider extends RazorLanguageFeatureBase implements vsco return; } - if (document.version !== remappedResponse.hostDocumentVersion) { + if (projection.hostDocumentVersion !== remappedResponse.hostDocumentVersion) { // This hover result is for a different version of the text document, bail. return; } diff --git a/src/razor/src/html/htmlProjectedDocument.ts b/src/razor/src/html/htmlProjectedDocument.ts index b8c2fc530..1ec11bc5d 100644 --- a/src/razor/src/html/htmlProjectedDocument.ts +++ b/src/razor/src/html/htmlProjectedDocument.ts @@ -12,7 +12,6 @@ export class HtmlProjectedDocument implements IProjectedDocument { public readonly path: string; private content = ''; private hostDocumentVersion: number | null = null; - private projectedDocumentVersion = 0; public constructor(public readonly uri: vscode.Uri) { this.path = getUriPath(uri); @@ -22,10 +21,6 @@ export class HtmlProjectedDocument implements IProjectedDocument { return this.hostDocumentVersion; } - public get projectedDocumentSyncVersion(): number { - return this.projectedDocumentVersion; - } - public get length(): number { return this.content.length; } @@ -63,7 +58,6 @@ export class HtmlProjectedDocument implements IProjectedDocument { } private setContent(content: string) { - this.projectedDocumentVersion++; this.content = content; } } diff --git a/src/razor/src/html/htmlProjectedDocumentContentProvider.ts b/src/razor/src/html/htmlProjectedDocumentContentProvider.ts index 9ffec8ea5..214ac156a 100644 --- a/src/razor/src/html/htmlProjectedDocumentContentProvider.ts +++ b/src/razor/src/html/htmlProjectedDocumentContentProvider.ts @@ -46,7 +46,7 @@ export class HtmlProjectedDocumentContentProvider implements vscode.TextDocument } const content = `${razorDocument.htmlDocument.getContent()} -// ${razorDocument.htmlDocument.projectedDocumentSyncVersion}`; +// ${razorDocument.htmlDocument.hostDocumentSyncVersion}`; return content; } diff --git a/src/razor/src/projection/IProjectedDocument.ts b/src/razor/src/projection/IProjectedDocument.ts index d4c8df1c8..f16ce6248 100644 --- a/src/razor/src/projection/IProjectedDocument.ts +++ b/src/razor/src/projection/IProjectedDocument.ts @@ -9,7 +9,6 @@ export interface IProjectedDocument { readonly path: string; readonly uri: vscode.Uri; readonly hostDocumentSyncVersion: number | null; - readonly projectedDocumentSyncVersion: number; readonly length: number; getContent(): string; } diff --git a/src/razor/src/projection/projectionResult.ts b/src/razor/src/projection/projectionResult.ts index 0663f4bd7..55f65d7b3 100644 --- a/src/razor/src/projection/projectionResult.ts +++ b/src/razor/src/projection/projectionResult.ts @@ -10,4 +10,5 @@ export interface ProjectionResult { uri: vscode.Uri; position: vscode.Position; languageKind: LanguageKind; + hostDocumentVersion: number; } diff --git a/src/razor/src/razorLanguageFeatureBase.ts b/src/razor/src/razorLanguageFeatureBase.ts index 0a5cfdc07..60ac7372c 100644 --- a/src/razor/src/razorLanguageFeatureBase.ts +++ b/src/razor/src/razorLanguageFeatureBase.ts @@ -64,6 +64,7 @@ export class RazorLanguageFeatureBase { uri: projectedUri, position: languageResponse.position, languageKind: languageResponse.kind, + hostDocumentVersion: projectedDocument.hostDocumentSyncVersion, } as ProjectionResult; } default: From 8429462a7748da3f83acfdfa933612ee6607c42b Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Mon, 26 Aug 2024 23:50:24 -0700 Subject: [PATCH 003/100] Fixup changelog version numbers --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dda016dd5..fcba85f56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ * Bump xamltools to 17.12.35223.16 (PR: [#7464](https://github.com/dotnet/vscode-csharp/pull/7464)) * Added XAML Hot Reload support for x:FactoryMethod and x:Arguments -# 2.44.x +# 2.44.19 * Bump Roslyn to 4.12.0-2.24416.3 (PR: [#7448](https://github.com/dotnet/vscode-csharp/pull/7448)) * Use EnableCodeStyleSeverity instead of AnalysisLevel to control new diagnostic severity behavior (PR: [#73843](https://github.com/dotnet/roslyn/pull/73843)) * Cleanup LSP error reporting (PR: [#74530](https://github.com/dotnet/roslyn/pull/74530)) @@ -51,7 +51,7 @@ * Task 2187810: [VS Code] Add OnEnter rules to indent tags (PR: [#7426](https://github.com/dotnet/vscode-csharp/pull/7426)) * Fix completion handler bug that causes language server to crash (#7401) (PR: [#7406](https://github.com/dotnet/vscode-csharp/pull/7406)) -# 2.41.x +# 2.41.26 * Bump Roslyn to 4.12.0-1.24376.3 (PR: [#7393](https://github.com/dotnet/vscode-csharp/pull/7393)) * Fix race condition in LSP FindAllReferences when linked files were involved.(PR: [#74566](https://github.com/dotnet/roslyn/pull/74566)) * Fix dll load issue when loading Razor projects in VSCode (PR: [#74570](https://github.com/dotnet/roslyn/pull/74570)) @@ -78,7 +78,7 @@ * `dotnet.implementType.insertionBehavior` to `dotnet.typeMembers.memberInsertionLocation` * `dotnet.implementType.propertyGenerationBehavior` to `dotnet.typeMembers.propertyGenerationBehavior` -# 2.39.x +# 2.39.29 * Add language status bar item displaying project context for open files (PR: [#7321](https://github.com/dotnet/vscode-csharp/pull/7321), PR: [#7333](https://github.com/dotnet/vscode-csharp/pull/7333)) * Add language status bar item for workspace status (C# standalone) (PR: [#7254](https://github.com/dotnet/vscode-csharp/pull/7254), PR: [#7329])https://github.com/dotnet/vscode-csharp/pull/7329)) * Update Razor to 9.0.0-preview.24365.1 (PR: [#7354](https://github.com/dotnet/vscode-csharp/pull/7354)) From c60004679e6ec4965bcb7448c5e7ffc3aff7be19 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Tue, 27 Aug 2024 18:12:03 +0000 Subject: [PATCH 004/100] Localization result of c88f538ffeb13fd238d67bbe7f6aec6444401056. --- 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 8f8deb11b..bf0f25554 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Umožňuje zobrazit regulární výrazy v seznamu dokončení.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Povolí podporu zobrazení neimportovaných typů a neimportovaných metod rozšíření v seznamech dokončení. Při potvrzení se na začátek aktuálního souboru přidá příslušná direktiva použití. (Dříve omnisharp.enableImportCompletion)", "configuration.dotnet.completion.showNameCompletionSuggestions": "Pro členy, které jste nedávno vybrali, proveďte automatické dokončování názvů objektů.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automaticky zobrazovat seznam dokončení v seznamech argumentů", "configuration.dotnet.defaultSolution.description": "Cesta výchozího řešení, které se má otevřít v pracovním prostoru. Můžete přeskočit nastavením na „zakázat“. (Dříve omnisharp.defaultLaunchSolution)", "configuration.dotnet.dotnetPath": "Zadává cestu k adresáři instalace dotnet, která se má použít místo výchozí systémové instalace. To má vliv pouze na instalaci dotnet, která se má použít k hostování samotného jazykového serveru. Příklad: /home/username/mycustomdotnetdirectory", "configuration.dotnet.enableXamlTools": "Povolí nástroje XAML při použití sady C# Dev Kit", diff --git a/package.nls.de.json b/package.nls.de.json index 8109c69d0..fed40a71a 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Reguläre Ausdrücke in der Vervollständigungsliste anzeigen.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Ermöglicht die Anzeige nicht importierter Typen und nicht importierter Erweiterungsmethoden in Vervollständigungslisten. Wenn ein Commit ausgeführt wird, wird die entsprechende using-Direktive am Anfang der aktuellen Datei hinzugefügt. (Zuvor \"omnisharp.enableImportCompletion\")", "configuration.dotnet.completion.showNameCompletionSuggestions": "Führen Sie die automatische Vervollständigung des Objektnamens für die Elemente aus, die Sie kürzlich ausgewählt haben.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Vervollständigungsliste in Argumentlisten automatisch anzeigen", "configuration.dotnet.defaultSolution.description": "Der Pfad der Standardlösung, die im Arbeitsbereich geöffnet werden soll, oder auf \"deaktivieren\" festlegen, um sie zu überspringen. (Zuvor \"omnisharp.defaultLaunchSolution\")", "configuration.dotnet.dotnetPath": "Gibt den Pfad zu einem dotnet-Installationsverzeichnis an, das anstelle des Standardsystems verwendet werden soll. Dies wirkt sich nur auf die dotnet-Installation aus, die zum Hosten des Sprachservers selbst verwendet werden soll. Beispiel: \"/home/username/mycustomdotnetdirectory\".", "configuration.dotnet.enableXamlTools": "Aktiviert XAML-Tools bei Verwendung des C#-Dev Kit", diff --git a/package.nls.es.json b/package.nls.es.json index db2294fff..4d8398fd3 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Mostrar expresiones regulares en la lista de finalización.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Habilita la compatibilidad para mostrar tipos no importados y métodos de extensión no importados en listas de finalización. Cuando se confirme, se agregará la directiva de uso adecuada en la parte superior del archivo actual. (Anteriormente \"omnisharp.enableImportCompletion\")", "configuration.dotnet.completion.showNameCompletionSuggestions": "Realice la finalización automática del nombre de objeto para los miembros que ha seleccionado recientemente.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Mostrar automáticamente la lista de finalización en las listas de argumentos", "configuration.dotnet.defaultSolution.description": "Ruta de acceso de la solución predeterminada que se va a abrir en el área de trabajo o se establece en \"deshabilitar\" para omitirla. (Anteriormente \"omnisharp.defaultLaunchSolution\")", "configuration.dotnet.dotnetPath": "Especifica la ruta de acceso a un directorio de instalación de dotnet que se va a usar en lugar del predeterminado del sistema. Esto solo influye en la instalación de dotnet que se va a usar para hospedar el propio servidor de idioma. Ejemplo: \"/home/username/mycustomdotnetdirectory\".", "configuration.dotnet.enableXamlTools": "Habilita las herramientas XAML al usar el Kit de desarrollo de C#", diff --git a/package.nls.fr.json b/package.nls.fr.json index e31b8b297..b6477cf0d 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Afficher les expressions régulières dans la liste de saisie semi-automatique.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Active la prise en charge de l’affichage des types non pris en charge et des méthodes d’extension non prises en charge dans les listes de saisie semi-automatique. Une fois validée, la directive using appropriée est ajoutée en haut du fichier actif. (Précédemment `omnisharp.enableImportCompletion`)", "configuration.dotnet.completion.showNameCompletionSuggestions": "Effectuez la complétion automatique du nom d’objet pour les membres que vous avez récemment sélectionnés.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Afficher automatiquement la liste de complétion dans les listes d'arguments", "configuration.dotnet.defaultSolution.description": "Le chemin d’accès de la solution par défaut à ouvrir dans l’espace de travail, ou la valeur ’disable’ pour l’ignorer. (Précédemment `omnisharp.defaultLaunchSolution`)", "configuration.dotnet.dotnetPath": "Spécifie le chemin d’accès à un répertoire d’installation de dotnet à utiliser à la place du répertoire par défaut du système. Cela n’a d’influence que sur l’installation dotnet à utiliser pour héberger le serveur de langues lui-même. Exemple : \"/home/username/mycustomdotnetdirect\" : \"/home/nom d’utilisateur/monrépertoiredotnetpersonnalisé\".", "configuration.dotnet.enableXamlTools": "Active les outils XAML lors de l’utilisation du Kit de développement C#", diff --git a/package.nls.it.json b/package.nls.it.json index 377e73f1e..d93ac3802 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Mostra espressioni regolari nell'elenco di completamento.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Abilita il supporto per mostrare i tipi non importati e i metodi di estensione non importati negli elenchi di completamento. Quando viene eseguito il commit, la direttiva using appropriata verrà aggiunta all'inizio del file corrente. (In precedenza “omnisharp.enableImportCompletion”)", "configuration.dotnet.completion.showNameCompletionSuggestions": "Consente di eseguire il completamento automatico del nome dell'oggetto per i membri selezionati di recente.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Mostra automaticamente l'elenco di completamento negli elenchi di argomenti", "configuration.dotnet.defaultSolution.description": "Percorso della soluzione predefinita da aprire nell'area di lavoro o impostare su 'disabilita' per ignorarla. (In precedenza “omnisharp.defaultLaunchSolution”)", "configuration.dotnet.dotnetPath": "Specifica il percorso di una directory di installazione dotnet da usare al posto di quella predefinita del sistema. Ciò influisce solo sull'installazione di dotnet da usare per ospitare il server di linguaggio stesso. Esempio: \"/home/username/mycustomdotnetdirectory\".", "configuration.dotnet.enableXamlTools": "Abilita gli strumenti XAML quando si usa il kit di sviluppo C#", diff --git a/package.nls.ja.json b/package.nls.ja.json index 5a1afad04..acce6b533 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "入力候補一覧に正規表現を表示します。", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "インポートされていない型とインポートされていない拡張メソッドを入力候補一覧に表示するためのサポートを有効にします。コミットすると、現在のファイルの先頭に適切な using ディレクティブが追加されます。(以前の `omnisharp.enableImportCompletion`)", "configuration.dotnet.completion.showNameCompletionSuggestions": "最近選択したメンバーの自動オブジェクト名の完了を実行します。", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "引数リストに入力候補一覧を自動的に表示する", "configuration.dotnet.defaultSolution.description": "ワークスペースで開く既定のソリューションのパス。スキップするには 'disable' に設定します。(以前の `omnisharp.defaultLaunchSolution`)", "configuration.dotnet.dotnetPath": "既定のシステム ディレクトリの代わりに使用する dotnet インストール ディレクトリへのパスを指定します。これは、言語サーバー自体をホストするために使用する dotnet インストールにのみ影響します。例: \"/home/username/mycustomdotnetdirectory\"。", "configuration.dotnet.enableXamlTools": "C# 開発キットを使用するときに XAML ツールを有効にします", diff --git a/package.nls.ko.json b/package.nls.ko.json index 6b84fd491..9d5971d93 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "완성 목록에 정규식을 표시합니다.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "완성 목록에 가져오지 않은 유형과 가져오지 않은 확장 메서드를 표시하기 위한 지원을 활성화합니다. 커밋되면 적절한 using 지시문이 현재 파일의 맨 위에 추가됩니다(이전 `omnisharp.enableImportCompletion`).", "configuration.dotnet.completion.showNameCompletionSuggestions": "최근에 선택한 멤버에 대해 자동 개체 이름 완성을 수행합니다.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "인수 목록에 자동으로 완성 목록 표시", "configuration.dotnet.defaultSolution.description": "작업 영역에서 열릴 기본 솔루션의 경로, 건너뛰려면 '비활성화'로 설정하세요(이전 `omnisharp.defaultLaunchSolution`).", "configuration.dotnet.dotnetPath": "기본 시스템 대신 사용할 dotnet 설치 디렉터리를 지정합니다. 이는 언어 서버 자체를 호스팅하는 데 사용할 dotnet 설치에만 영향을 줍니다(예: \"/home/username/mycustomdotnetdirectory\").", "configuration.dotnet.enableXamlTools": "C# 개발자 키트를 사용할 때 XAML 도구 사용", diff --git a/package.nls.pl.json b/package.nls.pl.json index 968ba7e06..ce1f30c5f 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Pokaż wyrażenia regularne na liście uzupełniania.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Zapewnia obsługę wyświetlania niezaimportowanych typów i niezaimportowanych metod rozszerzeń na listach uzupełniania. Po zadeklarowaniu odpowiednia dyrektywa using zostanie dodana w górnej części bieżącego pliku. (Wcześniej „omnisharp.enableImportCompletion”)", "configuration.dotnet.completion.showNameCompletionSuggestions": "Wykonaj automatyczne uzupełnianie nazw obiektów dla elementów członkowskich, które zostały ostatnio wybrane.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatycznie pokaż listę uzupełniania na listach argumentów", "configuration.dotnet.defaultSolution.description": "Ścieżka domyślnego rozwiązania, która ma zostać otwarta w obszarze roboczym, lub ustawiona na wartość „wyłącz”, aby je pominąć. (Poprzednio „omnisharp.defaultLaunchSolution”)", "configuration.dotnet.dotnetPath": "Określa ścieżkę do katalogu instalacyjnego dotnet, który ma być używany zamiast domyślnego katalogu systemowego. Ma to wpływ tylko na instalację dotnet używaną do hostowania samego serwera językowego. Przykład: „/home/username/mycustomdotnetdirectory”.", "configuration.dotnet.enableXamlTools": "Włącza narzędzia XAML podczas korzystania z zestawu deweloperskiego języka C#", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index b415f69aa..76383b5c7 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Mostrar expressões regulares na lista de conclusão.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Habilita o suporte para mostrar tipos e métodos de extensão não importados em listas de conclusão. Quando confirmado, a diretiva using apropriada será adicionada no topo do arquivo atual. (Anteriormente `omnisharp.enableImportCompletion`)", "configuration.dotnet.completion.showNameCompletionSuggestions": "Execute a conclusão automática do nome do objeto para os membros que você selecionou recentemente.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Mostrar automaticamente a lista de conclusão nas listas de argumentos", "configuration.dotnet.defaultSolution.description": "O caminho da solução padrão a ser aberta no workspace ou definido como 'desabilitado' para ignorá-la. (Anteriormente `omnisharp.defaultLaunchSolution`)", "configuration.dotnet.dotnetPath": "Especifica o caminho para um diretório de instalação dotnet a ser usado em vez do sistema padrão. Isso influencia apenas a instalação do dotnet a ser usada para hospedar o próprio servidor de idiomas. Exemplo: \"/home/username/mycustomdotnetdirectory\".", "configuration.dotnet.enableXamlTools": "Habilita ferramentas XAML ao usar o Kit de Desenvolvimento em C#", diff --git a/package.nls.ru.json b/package.nls.ru.json index 722182a5f..497c890f5 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Отображение регулярных выражений в списке завершения.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Включает поддержку отображения неимпортированных типов и неимпортированных методов расширения в списках завершения. При фиксации соответствующая директива использования будет добавлена в начало текущего файла. (Ранее — \"omnisharp.enableImportCompletion\")", "configuration.dotnet.completion.showNameCompletionSuggestions": "Выполните автоматическое завершение имен объектов для выбранных элементов.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Автоматически показывать список завершения в списках аргументов", "configuration.dotnet.defaultSolution.description": "Путь к решению по умолчанию, которое будет открыто в рабочей области. Или задайте значение \"Отключить\", чтобы пропустить его. (Ранее — \"omnisharp.defaultLaunchSolution\")", "configuration.dotnet.dotnetPath": "Указывает путь к каталогу установки dotnet для использования вместо стандартного системного каталога. Это влияет только на установку dotnet, используемую для размещения самого языкового сервера. Пример: \"/home/username/mycustomdotnetdirectory\".", "configuration.dotnet.enableXamlTools": "Включает инструменты XAML при использовании комплекта разработки C# Dev Kit.", diff --git a/package.nls.tr.json b/package.nls.tr.json index 7008bca04..816021e0a 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "Tamamlama listesinde normal ifadeleri göster.", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "Tamamlanma listelerinde içe aktarılmamış türleri ve içe aktarılmamış uzantı yöntemlerini göstermeye yönelik desteği etkinleştirir. Taahhüt edildiğinde, uygun kullanım yönergesi geçerli dosyanın en üstüne eklenecektir. (Önceden 'omnisharp.enableImportCompletion')", "configuration.dotnet.completion.showNameCompletionSuggestions": "Yakın zamanda seçtiğiniz üyeler için otomatik nesne adı tamamlama gerçekleştirin.", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Bağımsız değişken listelerinde tamamlama listesini otomatik olarak göster", "configuration.dotnet.defaultSolution.description": "Varsayılan çözümün yolu, çalışma alanında açılacak veya atlamak için 'devre dışı' olarak ayarlanacak. (Daha önce 'omnisharp.defaultLaunchSolution')", "configuration.dotnet.dotnetPath": "Varsayılan sistem dizini yerine kullanılacak bir dotnet kurulum dizininin yolunu belirtir. Bu, yalnızca dil sunucusunun kendisini barındırmak için kullanılacak dotnet kurulumunu etkiler. Örnek: \"/home/username/mycustomdotnetdirectory\".", "configuration.dotnet.enableXamlTools": "C# Geliştirme Setini kullanırken XAML araçlarını etkinleştirir", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 39b7598ed..104cd54f3 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "在完成列表中显示正则表达式。", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "支持在完成列表中显示未导入的类型和未导入的扩展方法。提交后,相应的 using 指令将添加到当前文件的顶部。(之前为 \"omnisharp.enableImportCompletion\")", "configuration.dotnet.completion.showNameCompletionSuggestions": "对最近选择的成员执行自动对象名称完成。", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "自动显示参数列表中的补全列表", "configuration.dotnet.defaultSolution.description": "要在工作区中打开的默认解决方案的路径,或者设置为“禁用”以跳过它。(之前为 \"omnisharp.defaultLaunchSolution\")", "configuration.dotnet.dotnetPath": "指定要使用的 dotnet 安装目录的路径,而不是默认的系统目录。这仅影响用于承载语言服务器本身的 dotnet 安装。示例: \"/home/username/mycustomdotnetdirectory\"。", "configuration.dotnet.enableXamlTools": "使用 C# 开发工具包时启用 XAML 工具", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 8afde4396..01dd47f06 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -41,7 +41,7 @@ "configuration.dotnet.completion.provideRegexCompletions": "在完成清單中顯示規則運算式。", "configuration.dotnet.completion.showCompletionItemsFromUnimportedNamespaces": "啟用在完成清單中顯示未匯入的類型和未匯入的擴充方法的支援。認可時,適當的 using 指示詞會新增到目前檔案的頂端。(先前為 `omnisharp.enableImportCompletion`)", "configuration.dotnet.completion.showNameCompletionSuggestions": "為您最近選取的成員執行自動物件名稱完成。", - "configuration.dotnet.completion.triggerCompletionInArgumentLists": "Automatically show completion list in argument lists", + "configuration.dotnet.completion.triggerCompletionInArgumentLists": "自動在引數清單中顯示自動完成清單", "configuration.dotnet.defaultSolution.description": "要在工作區中開啟的預設解決方案路徑,或設為 [停用] 以略過它。(先前為 `omnisharp.defaultLaunchSolution`)", "configuration.dotnet.dotnetPath": "指定要使用的 dotnet 安裝目錄路徑,而非系統預設的路徑。這只會影響用來裝載語言伺服器本身的 dotnet 安裝。範例: \"/home/username/mycustomdotnetdirectory”。", "configuration.dotnet.enableXamlTools": "使用 C# 開發套件時啟用 XAML 工具", From b52373b4a7a83e0b313cc8b0cab3aa42989853e2 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 11:43:29 -0700 Subject: [PATCH 005/100] Update changelog after snap --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fcba85f56..cda4c460b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest + +# 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) * Bump Razor to 9.0.0-preview.24418.1 (PR: [#7456](https://github.com/dotnet/vscode-csharp/pull/7456)) * Don't add already known documents to the misc files project (#10753) (PR: [#10753](https://github.com/dotnet/razor/pull/10753)) From aa8146f551e2379b0dbffbcf6786d50ddd7696fd Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 12:46:49 -0700 Subject: [PATCH 006/100] Add hover integration tests --- .../hover.integration.tests.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/integrationTests/hover.integration.tests.ts diff --git a/test/integrationTests/hover.integration.tests.ts b/test/integrationTests/hover.integration.tests.ts new file mode 100644 index 000000000..d521f2198 --- /dev/null +++ b/test/integrationTests/hover.integration.tests.ts @@ -0,0 +1,45 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +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`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'app', 'hover.cs')); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Hover returns correct documentation', async () => { + const hovers = ( + await vscode.commands.executeCommand( + 'vscode.executeHoverProvider', + vscode.window.activeTextEditor!.document.uri, + new vscode.Position(33, 27) + ) + ); + + const expected = + '```csharp\r\nbool testissue.Compare(int gameObject, string tagName)\r\n```\r\n \r\nA cref testissue \r\n**strong text** \r\n_italic text_ \r\nunderline text \r\n \r\n• Item 1\\. \r\n• Item 2\\. \r\n \r\n[link text](https://google.com) \r\n \r\nRemarks are cool too\\. \r\n \r\nReturns: \r\n  a string \r\n \r\nExceptions: \r\n  NullReferenceException \r\n'; + + expect(hovers.length).toEqual(1); + expect((hovers[0].contents[0] as vscode.MarkdownString).value).toEqual(expected); + expect(hovers[0].range).toStrictEqual(new vscode.Range(33, 27, 33, 34)); + }); +}); From 49437ddd9de3da07b13aec021fc290fa16cdf934 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 12:23:36 -0700 Subject: [PATCH 007/100] Add find references tests --- test/integrationTests/integrationHelpers.ts | 11 +++ .../references.integration.test.ts | 69 +++++++++++++++++++ .../slnWithCsproj/src/app/reference.cs | 1 + 3 files changed, 81 insertions(+) create mode 100644 test/integrationTests/references.integration.test.ts diff --git a/test/integrationTests/integrationHelpers.ts b/test/integrationTests/integrationHelpers.ts index 8ec4f608e..5f3405e82 100644 --- a/test/integrationTests/integrationHelpers.ts +++ b/test/integrationTests/integrationHelpers.ts @@ -120,6 +120,17 @@ export async function getCodeLensesAsync(): Promise { }); } +export function sortLocations(locations: vscode.Location[]): vscode.Location[] { + return locations.sort((a, b) => { + const uriCompare = a.uri.fsPath.localeCompare(b.uri.fsPath); + if (uriCompare !== 0) { + return uriCompare; + } + + return a.range.start.compareTo(b.range.start); + }); +} + function isGivenSln(workspace: typeof vscode.workspace, expectedProjectFileName: string) { const primeWorkspace = workspace.workspaceFolders![0]; const projectFileName = primeWorkspace.uri.fsPath.split(path.sep).pop(); diff --git a/test/integrationTests/references.integration.test.ts b/test/integrationTests/references.integration.test.ts new file mode 100644 index 000000000..7b9042e25 --- /dev/null +++ b/test/integrationTests/references.integration.test.ts @@ -0,0 +1,69 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +import testAssetWorkspace from './testAssets/testAssetWorkspace'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + openFileInWorkspaceAsync, + sortLocations, +} from './integrationHelpers'; +import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; + +describe(`[${testAssetWorkspace.description}] Test Find References`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'app', 'reference.cs')); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Finds references in same file', async () => { + const requestPosition = new vscode.Position(13, 23); + const referenceList = await getReferences(requestPosition); + + expect(referenceList.length).toEqual(2); + expect(referenceList[0].uri.path).toContain('reference.cs'); + expect(referenceList[0].range).toStrictEqual(new vscode.Range(6, 20, 6, 23)); + + expect(referenceList[1].uri.path).toContain('reference.cs'); + expect(referenceList[1].range).toStrictEqual(new vscode.Range(13, 22, 13, 25)); + }); + + test('Finds references in other files', async () => { + const requestPosition = new vscode.Position(14, 17); + const referenceList = await getReferences(requestPosition); + + expect(referenceList.length).toEqual(2); + expect(referenceList[0].uri.path).toContain('definition.cs'); + expect(referenceList[0].range).toStrictEqual(new vscode.Range(4, 25, 4, 35)); + + expect(referenceList[1].uri.path).toContain('reference.cs'); + expect(referenceList[1].range).toStrictEqual(new vscode.Range(14, 17, 14, 27)); + }); +}); + +async function getReferences(position: vscode.Position): Promise { + const referenceList = ( + await vscode.commands.executeCommand( + 'vscode.executeReferenceProvider', + vscode.window.activeTextEditor!.document.uri, + position + ) + ); + + return sortLocations(referenceList); +} diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs index 92737c378..47a32926c 100644 --- a/test/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs @@ -12,6 +12,7 @@ public class Bar public Bar() { new Foo().Baz(); + Test.Definition d; } } } \ No newline at end of file From a4a36b798b995582e2214d6513a72e384315c4a2 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 14:43:11 -0700 Subject: [PATCH 008/100] Add go to implementation integration test --- .../gotoImplementation.integration.test.ts | 61 +++++++++++++++++++ .../src/app/BaseClassImplementation.cs | 6 ++ .../src/app/SomeInterfaceImpl.cs | 6 -- 3 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 test/integrationTests/gotoImplementation.integration.test.ts create mode 100644 test/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs delete mode 100644 test/integrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs diff --git a/test/integrationTests/gotoImplementation.integration.test.ts b/test/integrationTests/gotoImplementation.integration.test.ts new file mode 100644 index 000000000..51a3c4400 --- /dev/null +++ b/test/integrationTests/gotoImplementation.integration.test.ts @@ -0,0 +1,61 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +import testAssetWorkspace from './testAssets/testAssetWorkspace'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + openFileInWorkspaceAsync, + sortLocations, +} from './integrationHelpers'; +import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; + +describe(`[${testAssetWorkspace.description}] Test Go To Implementation`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'app', 'implementation.cs')); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Finds implementations', async () => { + const requestPosition = new vscode.Position(4, 22); + const implementationList = await getImplementations(requestPosition); + + expect(implementationList).toHaveLength(3); + + expect(implementationList[0].uri.path).toContain('BaseClassImplementation.cs'); + expect(implementationList[0].range).toStrictEqual(new vscode.Range(2, 17, 2, 40)); + + expect(implementationList[1].uri.path).toContain('implementation.cs'); + expect(implementationList[1].range).toStrictEqual(new vscode.Range(4, 17, 4, 26)); + + expect(implementationList[2].uri.path).toContain('implementation.cs'); + expect(implementationList[2].range).toStrictEqual(new vscode.Range(5, 17, 5, 26)); + }); +}); + +async function getImplementations(position: vscode.Position): Promise { + const implementationList = ( + await vscode.commands.executeCommand( + 'vscode.executeImplementationProvider', + vscode.window.activeTextEditor!.document.uri, + position + ) + ); + + return sortLocations(implementationList); +} diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs new file mode 100644 index 000000000..a0c05c59b --- /dev/null +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs @@ -0,0 +1,6 @@ +namespace minimal +{ + public class BaseClassImplementation : BaseClass + { + } +} \ No newline at end of file diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs deleted file mode 100644 index ce6b9fa31..000000000 --- a/test/integrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace ReAnalyze -{ - public class SomeInterfaceImpl: ISomeInterface - { - } -} \ No newline at end of file From a14d71280feaf186a394ce53aba048317f403b65 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Wed, 28 Aug 2024 08:23:08 +1000 Subject: [PATCH 009/100] Bump Razor --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9dc0bd06d..e5514e81e 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "defaults": { "roslyn": "4.12.0-2.24422.6", "omniSharp": "1.39.11", - "razor": "9.0.0-preview.24418.1", + "razor": "9.0.0-preview.24427.2", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "17.12.35223.16" }, From c87e57fc256550055baf7aea1c673a2e60497b39 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Wed, 28 Aug 2024 08:27:44 +1000 Subject: [PATCH 010/100] Update changelog --- CHANGELOG.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cda4c460b..b97e52237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,21 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Bump Razor to 9.0.0-preview.24427.2 (PR: [#7471](https://github.com/dotnet/vscode-csharp/pull/7471)) + * Suppress unique ids (#10791) (PR: [#10791](https://github.com/dotnet/razor/pull/10791)) + * Self-versioned documents (#10747) (PR: [#10747](https://github.com/dotnet/razor/pull/10747)) + * Remove ItemCollection from CodeRenderingContext (#10764) (PR: [#10764](https://github.com/dotnet/razor/pull/10764)) + * Moving formatting service to common layer (#10761) (PR: [#10761](https://github.com/dotnet/razor/pull/10761)) + * Allow LSP and cohosting to provide specialized methods to get a syntax tree (#10765) (PR: [#10765](https://github.com/dotnet/razor/pull/10765)) + * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) + * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) + * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) * Bump Razor to 9.0.0-preview.24418.1 (PR: [#7456](https://github.com/dotnet/vscode-csharp/pull/7456)) * Don't add already known documents to the misc files project (#10753) (PR: [#10753](https://github.com/dotnet/razor/pull/10753)) * Remove ItemCollection from TagHelperDescriptorProviderContext (#10720) (PR: [#10720](https://github.com/dotnet/razor/pull/10720)) - * Cohost inlay hint support (#10672) (PR: [#10672](https://github.com/dotnet/razor/pull/10672)) * Fix excerpt service to allow for multi line verbatim strings (#10675) (PR: [#10675](https://github.com/dotnet/razor/pull/10675)) * Fix attribute parsing recovery (#10620) (PR: [#10620](https://github.com/dotnet/razor/pull/10620)) * Turn off trailing whitespace triming in strings (#10646) (PR: [#10646](https://github.com/dotnet/razor/pull/10646)) From b7e5d891a0555145f82b26f65b21afc1a33805d2 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 15:39:58 -0700 Subject: [PATCH 011/100] Fix hover tests to actually run and include correct content --- ...ion.tests.ts => hover.integration.test.ts} | 0 .../testAssets/slnWithCsproj/src/app/hover.cs | 47 ++++++++++++++----- 2 files changed, 35 insertions(+), 12 deletions(-) rename test/integrationTests/{hover.integration.tests.ts => hover.integration.test.ts} (100%) diff --git a/test/integrationTests/hover.integration.tests.ts b/test/integrationTests/hover.integration.test.ts similarity index 100% rename from test/integrationTests/hover.integration.tests.ts rename to test/integrationTests/hover.integration.test.ts diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs index cbfc3d9d3..3f51e4f3d 100644 --- a/test/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs @@ -1,16 +1,39 @@ using System; namespace Test { - class testissue - { - ///Checks if object is tagged with the tag. - /// The game object. - /// Name of the tag. - /// Returns true if object is tagged with tag. - - public static bool Compare(int gameObject,string tagName) - { - return true; - } - } + class testissue + { + /// + /// A cref + ///
+ /// strong text + ///
+ /// italic text + ///
+ /// underline text + /// + /// + /// + /// Item 1. + /// + /// + /// Item 2. + /// + /// + /// link text + /// + ///
+ /// + /// Oh no! + /// + /// an int + /// a string + /// + /// Remarks are cool too. + /// + public static bool Compare(int gameObject,string tagName) + { + return true; + } + } } \ No newline at end of file From e14a73624c7ccbc192b3d766514163a348f3fe25 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 15:59:45 -0700 Subject: [PATCH 012/100] Fix EOL --- test/integrationTests/hover.integration.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integrationTests/hover.integration.test.ts b/test/integrationTests/hover.integration.test.ts index d521f2198..46bbe7fac 100644 --- a/test/integrationTests/hover.integration.test.ts +++ b/test/integrationTests/hover.integration.test.ts @@ -5,6 +5,7 @@ import * as vscode from 'vscode'; import * as path from 'path'; +import { EOL } from 'os'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; @@ -35,8 +36,7 @@ describe(`[${testAssetWorkspace.description}] Hover Tests`, () => { ) ); - const expected = - '```csharp\r\nbool testissue.Compare(int gameObject, string tagName)\r\n```\r\n \r\nA cref testissue \r\n**strong text** \r\n_italic text_ \r\nunderline text \r\n \r\n• Item 1\\. \r\n• Item 2\\. \r\n \r\n[link text](https://google.com) \r\n \r\nRemarks are cool too\\. \r\n \r\nReturns: \r\n  a string \r\n \r\nExceptions: \r\n  NullReferenceException \r\n'; + const expected = `\`\`\`csharp${EOL}bool testissue.Compare(int gameObject, string tagName)${EOL}\`\`\`${EOL} ${EOL}A cref testissue ${EOL}**strong text** ${EOL}_italic text_ ${EOL}underline text ${EOL} ${EOL}• Item 1\\. ${EOL}• Item 2\\. ${EOL} ${EOL}[link text](https://google.com) ${EOL} ${EOL}Remarks are cool too\\. ${EOL} ${EOL}Returns: ${EOL}  a string ${EOL} ${EOL}Exceptions: ${EOL}  NullReferenceException ${EOL}`; expect(hovers.length).toEqual(1); expect((hovers[0].contents[0] as vscode.MarkdownString).value).toEqual(expected); From 5802da7c4f743ec2c5652986fe0a5bb3e19f89df Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 14:52:26 -0700 Subject: [PATCH 013/100] Add signature help integration tests --- .../signatureHelp.integration.test.ts | 85 +++++++++++++++++++ .../slnWithCsproj/src/app/sigHelp.cs | 11 +++ 2 files changed, 96 insertions(+) create mode 100644 test/integrationTests/signatureHelp.integration.test.ts diff --git a/test/integrationTests/signatureHelp.integration.test.ts b/test/integrationTests/signatureHelp.integration.test.ts new file mode 100644 index 000000000..6ac5f7aa0 --- /dev/null +++ b/test/integrationTests/signatureHelp.integration.test.ts @@ -0,0 +1,85 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +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`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'app', 'sigHelp.cs')); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Includes label when no documentation', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(19, 24)); + expect(signatureHelp.signatures[0].label).toEqual(`void sigHelp.noDocMethod()`); + expect(signatureHelp.signatures[0].documentation).toBe(undefined); + }); + + test('Includes method and parameter documentation', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(18, 19)); + expect(signatureHelp.signatures[0].label).toEqual( + `void sigHelp.DoWork(int Int1, float Float1, double Double1)` + ); + expect(signatureHelp.signatures[0].documentation).toEqual(`DoWork is some method.`); + + expect(signatureHelp.signatures[0].parameters[0].label).toEqual(`Int1`); + expect(signatureHelp.signatures[0].parameters[1].label).toEqual(`Float1`); + + expect(signatureHelp.signatures[0].parameters[0].documentation).toEqual(`Used to indicate status.`); + expect(signatureHelp.signatures[0].parameters[1].documentation).toEqual(`Used to specify context.`); + }); + + test('Identifies active parameter if there is no comma', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(18, 19)); + expect(signatureHelp.signatures[0].parameters[signatureHelp.activeParameter].label).toEqual(`Int1`); + }); + + test('Identifies active parameter based on comma', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(18, 21)); + expect(signatureHelp.signatures[0].parameters[signatureHelp.activeParameter].label).toEqual(`Float1`); + }); + + test('Identifies active parameter based on comma for multiple commas', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(18, 28)); + expect(signatureHelp.signatures[0].parameters[signatureHelp.activeParameter].label).toEqual(`Double1`); + }); + + test('Uses inner documentation from inside nested method call', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(20, 24)); + expect(signatureHelp.signatures[0].label).toEqual(`string sigHelp.Inner()`); + expect(signatureHelp.signatures[0].documentation).toEqual(`Inner`); + }); + + test('Uses outer documentation from outside nested method call', async function () { + const signatureHelp = await getSignatureHelp(new vscode.Position(20, 18)); + expect(signatureHelp.signatures[0].label).toEqual(`string sigHelp.Outer(string s)`); + expect(signatureHelp.signatures[0].documentation).toEqual(`Outer`); + }); +}); + +async function getSignatureHelp(position: vscode.Position): Promise { + return ( + await vscode.commands.executeCommand( + 'vscode.executeSignatureHelpProvider', + vscode.window.activeTextEditor!.document.uri, + position + ) + ); +} diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs index 811e90f8c..c9aa73219 100644 --- a/test/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs @@ -18,6 +18,17 @@ public static void main() { DoWork(4, 4.0f, 5.0); noDocMethod(); + Outer(Inner()); } + + /// + /// Outer + /// + public static string Outer(string s) => "Outer"; + + /// + /// Inner + /// + public static string Inner() => "Inner"; } } \ No newline at end of file From 7a66efeab9aaa82a6942ae66e8a02cb5dbb5f62a Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 27 Aug 2024 17:37:59 -0700 Subject: [PATCH 014/100] Add classification tests --- .../classification.integration.test.ts | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 test/integrationTests/classification.integration.test.ts diff --git a/test/integrationTests/classification.integration.test.ts b/test/integrationTests/classification.integration.test.ts new file mode 100644 index 000000000..173cb48f5 --- /dev/null +++ b/test/integrationTests/classification.integration.test.ts @@ -0,0 +1,156 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +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`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'app', 'semantictokens.cs')); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Semantic classification returns correct token types', async () => { + const expectedTokens: Token[] = [ + // 0:namespace Test + _keyword('namespace', 0, 0), + _namespace('Test', 0, 10), + // 1:{ + _punctuation('{', 1, 0), + // 2: public class TestProgram + _keyword('public', 2, 4), + _keyword('class', 2, 11), + _class('TestProgram', 2, 17), + // 3: { + _punctuation('{', 3, 4), + // 4: public static int TestMain(string[] args) + _keyword('public', 4, 8), + _keyword('static', 4, 15), + _keyword('int', 4, 22), + _staticMethod('TestMain', 4, 26), + _punctuation('(', 4, 34), + _keyword('string', 4, 35), + _punctuation('[', 4, 41), + _punctuation(']', 4, 42), + _parameter('args', 4, 44), + _punctuation(')', 4, 48), + // 5: { + _punctuation('{', 5, 8), + // 6: System.Console.WriteLine(string.Join(',', args)); + _namespace('System', 6, 12), + _operator('.', 6, 18), + _staticClass('Console', 6, 19), + _operator('.', 6, 26), + _staticMethod('WriteLine', 6, 27), + _punctuation('(', 6, 36), + _keyword('string', 6, 37), + _operator('.', 6, 43), + _staticMethod('Join', 6, 44), + _punctuation('(', 6, 48), + _string("','", 6, 49), + _punctuation(')', 6, 52), + _parameter('args', 6, 54), + _punctuation(')', 6, 58), + _punctuation(')', 6, 59), + _punctuation(';', 6, 60), + // 7: return 0; + _controlKeyword('return', 7, 12), + _number('0', 7, 19), + _punctuation(';', 7, 20), + // 8: } + _punctuation('}', 8, 8), + // 9: } + _punctuation('}', 9, 4), + //10: } + _punctuation('}', 10, 0), + ]; + + const tokens = await getTokens(); + + expect(tokens).toStrictEqual(expectedTokens); + }); +}); + +async function getTokens(): Promise { + const legend = ( + await vscode.commands.executeCommand( + 'vscode.provideDocumentSemanticTokensLegend', + vscode.window.activeTextEditor!.document.uri + ) + ); + + const actual = ( + await vscode.commands.executeCommand( + 'vscode.provideDocumentSemanticTokens', + vscode.window.activeTextEditor!.document.uri + ) + ); + + expect(legend).toBeDefined(); + expect(actual).toBeDefined(); + + const actualRanges: Array = []; + let lastLine = 0; + let lastCharacter = 0; + for (let i = 0; i < actual.data.length; i += 5) { + const lineDelta = actual.data[i], + charDelta = actual.data[i + 1], + len = actual.data[i + 2], + typeIdx = actual.data[i + 3], + modSet = actual.data[i + 4]; + const line = lastLine + lineDelta; + const character = lineDelta === 0 ? lastCharacter + charDelta : charDelta; + const tokenClassifiction = [ + legend.tokenTypes[typeIdx], + ...legend.tokenModifiers.filter((_, i) => modSet & (1 << i)), + ].join('.'); + actualRanges.push({ + startLine: line, + character: character, + length: len, + tokenClassifiction: tokenClassifiction, + }); + lastLine = line; + lastCharacter = character; + } + return actualRanges; +} + +interface Token { + startLine: number; + character: number; + length: number; + tokenClassifiction: string; +} + +function t(startLine: number, character: number, length: number, tokenClassifiction: string): Token { + return { startLine, character, length, tokenClassifiction }; +} + +const _keyword = (text: string, line: number, col: number) => t(line, col, text.length, 'keyword'); +const _controlKeyword = (text: string, line: number, col: number) => t(line, col, text.length, 'controlKeyword'); +const _punctuation = (text: string, line: number, col: number) => t(line, col, text.length, 'punctuation'); +const _operator = (text: string, line: number, col: number) => t(line, col, text.length, 'operator'); +const _number = (text: string, line: number, col: number) => t(line, col, text.length, 'number'); +const _string = (text: string, line: number, col: number) => t(line, col, text.length, 'string'); +const _namespace = (text: string, line: number, col: number) => t(line, col, text.length, 'namespace'); +const _class = (text: string, line: number, col: number) => t(line, col, text.length, 'class'); +const _staticClass = (text: string, line: number, col: number) => t(line, col, text.length, 'class.static'); +const _staticMethod = (text: string, line: number, col: number) => t(line, col, text.length, 'method.static'); +const _parameter = (text: string, line: number, col: number) => t(line, col, text.length, 'parameter'); From e2cc1d3af05c5c610aad64fc33b975842482dd51 Mon Sep 17 00:00:00 2001 From: Stefani Moore Date: Wed, 28 Aug 2024 14:39:23 -0700 Subject: [PATCH 015/100] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e5514e81e..743c7159d 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.35223.16" + "xamlTools": "17.12.35227.331" }, "main": "./dist/extension", "l10n": "./l10n", From e42aaff66829e21e4cd010e476b520cbdc93335d Mon Sep 17 00:00:00 2001 From: Stefani Moore Date: Wed, 28 Aug 2024 14:57:54 -0700 Subject: [PATCH 016/100] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b97e52237..b4bd7b791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,8 +31,8 @@ * Fix issue projects would fail to load with missing output path error (PR: [#74791](https://github.com/dotnet/roslyn/pull/74791)) * Expose option to disable completion triggers argument list (PR: [#74792](https://github.com/dotnet/roslyn/pull/74792)) * Update Debugger to v2.43.0 (PR: [#7420](https://github.com/dotnet/vscode-csharp/pull/7420)) -* Bump xamltools to 17.12.35223.16 (PR: [#7464](https://github.com/dotnet/vscode-csharp/pull/7464)) * Added XAML Hot Reload support for x:FactoryMethod and x:Arguments +* Bump xamltools to 17.12.35227.331 (PR: [#7489](https://github.com/dotnet/vscode-csharp/pull/7489)) # 2.44.19 * Bump Roslyn to 4.12.0-2.24416.3 (PR: [#7448](https://github.com/dotnet/vscode-csharp/pull/7448)) From cd9108c796c64524be497018c30eb3e735214241 Mon Sep 17 00:00:00 2001 From: Stefani Moore Date: Wed, 28 Aug 2024 15:07:54 -0700 Subject: [PATCH 017/100] Revert "Update CHANGELOG.md" This reverts commit e42aaff66829e21e4cd010e476b520cbdc93335d. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4bd7b791..b97e52237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,8 +31,8 @@ * Fix issue projects would fail to load with missing output path error (PR: [#74791](https://github.com/dotnet/roslyn/pull/74791)) * Expose option to disable completion triggers argument list (PR: [#74792](https://github.com/dotnet/roslyn/pull/74792)) * Update Debugger to v2.43.0 (PR: [#7420](https://github.com/dotnet/vscode-csharp/pull/7420)) +* Bump xamltools to 17.12.35223.16 (PR: [#7464](https://github.com/dotnet/vscode-csharp/pull/7464)) * Added XAML Hot Reload support for x:FactoryMethod and x:Arguments -* Bump xamltools to 17.12.35227.331 (PR: [#7489](https://github.com/dotnet/vscode-csharp/pull/7489)) # 2.44.19 * Bump Roslyn to 4.12.0-2.24416.3 (PR: [#7448](https://github.com/dotnet/vscode-csharp/pull/7448)) From 68ffa1c665234aff6025f8344e484bd662c76bde Mon Sep 17 00:00:00 2001 From: Stefani Moore Date: Wed, 28 Aug 2024 15:08:39 -0700 Subject: [PATCH 018/100] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b97e52237..2d12e76ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) +* Bump xamltools to 17.12.35223.16 (PR: [#7464](https://github.com/dotnet/vscode-csharp/pull/7464)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) From 590104e8a6c690ea051165ed7285ab834073075c Mon Sep 17 00:00:00 2001 From: Stefani Moore Date: Fri, 30 Aug 2024 10:48:25 -0700 Subject: [PATCH 019/100] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 743c7159d..2320c10d4 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.35227.331" + "xamlTools": "17.12.35230.10" }, "main": "./dist/extension", "l10n": "./l10n", From 31322789c16fca754318331e1372b681d7749b5e Mon Sep 17 00:00:00 2001 From: Stefani Moore Date: Fri, 30 Aug 2024 10:53:18 -0700 Subject: [PATCH 020/100] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d12e76ad..636f6dcd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) -* Bump xamltools to 17.12.35223.16 (PR: [#7464](https://github.com/dotnet/vscode-csharp/pull/7464)) +* Bump xamltools to 17.12.35230.10 (PR: [#7493](https://github.com/dotnet/vscode-csharp/pull/7493)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) From 014310e986651fbf999b52e619fa4f0410c3b1be Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 30 Aug 2024 10:58:01 -0700 Subject: [PATCH 021/100] Upgrade to Node v20.17 and update vsce --- CONTRIBUTING.md | 7 +- azure-pipelines/prereqs.yml | 4 +- package-lock.json | 1812 +++++++++++++++++++++++++++++++++-- package.json | 6 +- 4 files changed, 1717 insertions(+), 112 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 93b8c2810..26cf4ddec 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ Setting up your local development environment for the vscode-csharp repository i Before you start, make sure you have the following software installed on your machine: -* Node.js v18 ([v18.17.0 LTS](https://nodejs.org/en/blog/release/v18.17.0)). +* Node.js v18 ([v18.17.0 LTS](https://nodejs.org/en/blog/release/v20.17.0)). * Note - Building with higher major versions of Node.js is not advised - it may work but we do not test it. * Npm (The version shipped with node is fine) * .NET 8.0 SDK (dotnet should be on your path) @@ -141,6 +141,11 @@ Or, in VSCode settings (`Ctrl+,`): 3. Enable `razor.languageServer.debug`. 4. Set `razor.server.trace` to `Debug`. This gives you more detailed log messages in the output window. +### Updating NPM packages +We use the .NET eng AzDo artifacts feed https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet-public-npm/npm/registry/ with upstreams to the public npm registry. +Auth is required in order to pull new packages from the upstream. This can be done by running `vsts-npm-auth -config .npmrc`. +If you need to renew authorization, you can force it via `vsts-npm-auth -config .npmrc -F` + ## Creating VSIX Packages for the Extension To package this extension, we need to create VSIX Packages. The VSIX packages can be created using the gulp command `gulp vsix:release:package`. This will create all the platform specific VSIXs that you can then install manually in VSCode. diff --git a/azure-pipelines/prereqs.yml b/azure-pipelines/prereqs.yml index 0b8ce6cf1..368383244 100644 --- a/azure-pipelines/prereqs.yml +++ b/azure-pipelines/prereqs.yml @@ -12,9 +12,9 @@ steps: - task: NuGetAuthenticate@1 - task: NodeTool@0 - displayName: 'Install Node.js 18.x' + displayName: 'Install Node.js 20.x' inputs: - versionSpec: '18.x' + versionSpec: '20.x' # Some tests use predefined docker images with a specific version of .NET installed. # So we avoid installing .NET in those cases. diff --git a/package-lock.json b/package-lock.json index 043d55c55..a369f8fa9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,9 +58,9 @@ "@types/yauzl": "2.10.0", "@typescript-eslint/eslint-plugin": "^5.61.0", "@typescript-eslint/parser": "^5.61.0", - "@vscode/l10n-dev": "^0.0.30", + "@vscode/l10n-dev": "^0.0.35", "@vscode/test-electron": "2.3.8", - "@vscode/vsce": "2.21.0", + "@vscode/vsce": "3.0.0", "archiver": "5.3.0", "del": "3.0.0", "eslint": "^8.43.0", @@ -114,6 +114,380 @@ "node": ">=6.0.0" } }, + "node_modules/@azure-rest/ai-translation-text": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure-rest/ai-translation-text/-/ai-translation-text-1.0.0.tgz", + "integrity": "sha1-ZmT3YJ2e96FELKS9iyc0h0/qd4w=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure-rest/core-client": "^1.1.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure-rest/ai-translation-text/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure-rest/core-client": { + "version": "1.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure-rest/core-client/-/core-client-1.4.0.tgz", + "integrity": "sha1-O+KMAsbCDknepzp/AS2u7aTqy44=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.5.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure-rest/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure-rest/core-client/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/abort-controller/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/core-auth": { + "version": "1.7.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha1-VYt8t90SsAvuwHrl31kH103x69k=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/core-client": { + "version": "1.9.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha1-b8ac7igWiDq2xc3WU+5PL/l3T3Q=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.16.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.3.tgz", + "integrity": "sha1-veO8PrrX+IXd2d5q9eWo/CVLKH4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.9.0", + "@azure/logger": "^1.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/core-tracing": { + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha1-Bl2rTgk/thiZmIoc28gn2a2QtO4=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/core-util": { + "version": "1.9.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-util/-/core-util-1.9.2.tgz", + "integrity": "sha1-HcN9xbDa40xXi+Ys+YkFunwMr+c=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/identity": { + "version": "4.4.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/identity/-/identity-4.4.1.tgz", + "integrity": "sha1-SQ+irSZ4Yimvo2QRiSu1Pfo0eNM=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.3.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.14.0", + "@azure/msal-node": "^2.9.2", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha1-p+nD8p2ulAJ+vK9Jl1yTRVk0EPw=", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@azure/identity/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jws/-/jws-4.0.0.tgz", + "integrity": "sha1-LU6M9qMY/6oSYV6d7H6G5slzEPQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@azure/identity/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/logger": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/logger/-/logger-1.1.4.tgz", + "integrity": "sha1-Ijy/K0JN+mZHjOmk9XX1nG83l2g=", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true, + "license": "0BSD" + }, + "node_modules/@azure/msal-browser": { + "version": "3.22.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/msal-browser/-/msal-browser-3.22.0.tgz", + "integrity": "sha1-5MJgX6wSvY8Xdhfld8WdFdEFVRM=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.14.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.14.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/msal-common/-/msal-common-14.14.2.tgz", + "integrity": "sha1-WDtKycCJlTcY16Xi87jfLU27F/Q=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "2.13.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/msal-node/-/msal-node-2.13.1.tgz", + "integrity": "sha1-8UQ3EnW3w8vlZHYrhHcqlzJFekc=", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.14.2", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@azure/msal-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@babel/code-frame": { "version": "7.22.13", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/code-frame/-/code-frame-7.22.13.tgz", @@ -3172,14 +3546,18 @@ } }, "node_modules/@vscode/l10n-dev": { - "version": "0.0.30", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/l10n-dev/-/l10n-dev-0.0.30.tgz", - "integrity": "sha512-m/5voX3NtGCVQ/UjKajvwW9PPvjjvcuvEKiKRkf7dS8Q/JT+Sa5XJK70JrVuuwbfGwZktrBBhF25Eu9SXv4Q6A==", + "version": "0.0.35", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/l10n-dev/-/l10n-dev-0.0.35.tgz", + "integrity": "sha1-zdgQala33I/u9i0QxBPW2NlLLVw=", "dev": true, + "license": "MIT", "dependencies": { + "@azure-rest/ai-translation-text": "^1.0.0-beta.1", "debug": "^4.3.4", "deepmerge-json": "^1.5.0", "glob": "^10.0.0", + "markdown-it": "^14.0.0", + "node-html-markdown": "^1.3.0", "pseudo-localization": "^2.4.0", "web-tree-sitter": "^0.20.8", "xml2js": "^0.5.0", @@ -3189,6 +3567,13 @@ "vscode-l10n-dev": "dist/cli.js" } }, + "node_modules/@vscode/l10n-dev/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": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", + "dev": true, + "license": "Python-2.0" + }, "node_modules/@vscode/l10n-dev/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", @@ -3229,6 +3614,19 @@ } } }, + "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", + "integrity": "sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/@vscode/l10n-dev/node_modules/glob": { "version": "10.3.10", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-10.3.10.tgz", @@ -3251,6 +3649,41 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@vscode/l10n-dev/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha1-nvI4v6bccL2Of5VytS02mvVptCE=", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/@vscode/l10n-dev/node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha1-PDxZkog8Yz20cUzLTXtZNdmLfUU=", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/@vscode/l10n-dev/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha1-gGduwEMwJd0+F+6YPQ/o3loiN+A=", + "dev": true, + "license": "MIT" + }, "node_modules/@vscode/l10n-dev/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.3.tgz", @@ -3272,6 +3705,13 @@ "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", + "integrity": "sha1-+NP30OxMPeo1p+PI76TLi0XJ5+4=", + "dev": true, + "license": "MIT" + }, "node_modules/@vscode/l10n-dev/node_modules/yargs": { "version": "17.7.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/yargs/-/yargs-17.7.2.tgz", @@ -3377,16 +3817,21 @@ "dev": true }, "node_modules/@vscode/vsce": { - "version": "2.21.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce/-/vsce-2.21.0.tgz", - "integrity": "sha512-KuxYqScqUY/duJbkj9eE2tN2X/WJoGAy54hHtxT3ZBkM6IzrOg7H7CXGUPBxNlmqku2w/cAjOUSrgIHlzz0mbA==", + "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", + "integrity": "sha1-efpKJj65R31J77KTHUUgTj77y3g=", "dev": true, + "license": "MIT", "dependencies": { - "azure-devops-node-api": "^11.0.1", + "@azure/identity": "^4.1.0", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", "commander": "^6.2.1", - "glob": "^7.0.6", + "form-data": "^4.0.0", + "glob": "^11.0.0", "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "leven": "^3.1.0", @@ -3396,7 +3841,7 @@ "parse-semver": "^1.1.1", "read": "^1.0.7", "semver": "^7.5.2", - "tmp": "^0.2.1", + "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -3407,12 +3852,167 @@ "vsce": "vsce" }, "engines": { - "node": ">= 14" + "node": ">= 20" }, "optionalDependencies": { "keytar": "^7.7.0" } }, + "node_modules/@vscode/vsce-sign": { + "version": "2.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz", + "integrity": "sha1-tL8VXRbypLrcBp34UNyG91YSSEI=", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.2", + "@vscode/vsce-sign-alpine-x64": "2.0.2", + "@vscode/vsce-sign-darwin-arm64": "2.0.2", + "@vscode/vsce-sign-darwin-x64": "2.0.2", + "@vscode/vsce-sign-linux-arm": "2.0.2", + "@vscode/vsce-sign-linux-arm64": "2.0.2", + "@vscode/vsce-sign-linux-x64": "2.0.2", + "@vscode/vsce-sign-win32-arm64": "2.0.2", + "@vscode/vsce-sign-win32-x64": "2.0.2" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz", + "integrity": "sha1-SszEheVapv8EsZW0f3IurVfapY4=", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz", + "integrity": "sha1-Skt7UFtMwPWFljlIl8SaC84OVAw=", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz", + "integrity": "sha1-EKpp/rf4Gj3GjCQgOMoD6v8ZwS4=", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz", + "integrity": "sha1-MxVSjz6hAHpkizMgv/NqM6ngeqU=", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz", + "integrity": "sha1-QUL9qD5xMLMa7diqgeTapjNDI8I=", + "cpu": [ + "arm" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz", + "integrity": "sha1-zlxc/JnjRUtPt3BAWBK0a9bcqHA=", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz", + "integrity": "sha1-WauT8yLvs89JFm1OLoEnicMRdCg=", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz", + "integrity": "sha1-0JVwShSwQEwLb2lumInppRsxqGw=", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz", + "integrity": "sha1-KU6nK0T+3WlNSfXO9MVb84dtwlc=", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@vscode/vsce/node_modules/commander": { "version": "6.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-6.2.1.tgz", @@ -3422,6 +4022,46 @@ "node": ">= 6" } }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-11.0.0.tgz", + "integrity": "sha1-YDHfDXtl6qHMubKbXO0WzqZY534=", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha1-zgUhhWtFPIbiXyxMDQPm/33cRAs=", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@vscode/vsce/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -3434,37 +4074,66 @@ "node": ">=10" } }, + "node_modules/@vscode/vsce/node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha1-n8pM6WGvYIPiWcN26eNUFDH1KHs=", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/@vscode/vsce/node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/@vscode/vsce/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/@vscode/vsce/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha1-nwUiifI62L+Tl6KgQl57hhXFhYA=", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^7.1.3" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@vscode/vsce/node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha1-Fdk6GW8YkDTXFmyvn+Vec4TJiiE=", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@vscode/vsce/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha1-63g8wivB6L69BnFHbUbqTrMqea4=", "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/@webassemblyjs/ast": { @@ -4042,6 +4711,13 @@ "node": ">= 10.13.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "license": "MIT" + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/at-least-node/-/at-least-node-1.0.0.tgz", @@ -4068,10 +4744,11 @@ "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==" }, "node_modules/azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", + "version": "12.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=", "dev": true, + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" @@ -4913,6 +5590,16 @@ "node": ">= 0.12.0" } }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha1-V1+Te8QECiCuJzUqbQfJxadBmB8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -4940,6 +5627,19 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-2.20.3.tgz", @@ -5216,6 +5916,16 @@ "node": ">=4.0.0" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha1-P3rkIRKbyqrJvHSQXJigAJ7J7n8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-properties/-/define-properties-1.2.0.tgz", @@ -5249,6 +5959,16 @@ "node": ">=4" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/depd/-/depd-1.1.2.tgz", @@ -5359,16 +6079,17 @@ } }, "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha1-XEXo6GmVJiYzHXqrMm0B2vZdWJ0=", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "4.2.2", @@ -7124,6 +7845,21 @@ "node": ">= 8" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fs-constants/-/fs-constants-1.0.0.tgz", @@ -7759,6 +8495,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/he/-/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -8193,6 +8939,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8475,6 +9237,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/isarray/-/isarray-1.0.0.tgz", @@ -11085,10 +11860,11 @@ "dev": true }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha1-k6libOXl5mvU24aEnnUV6SNApwc=", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -11262,6 +12038,119 @@ "dev": true, "optional": true }, + "node_modules/node-html-markdown": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-html-markdown/-/node-html-markdown-1.3.0.tgz", + "integrity": "sha1-7wsZo7v8DxqICruf8qDJqmu/8qk=", + "dev": true, + "license": "MIT", + "dependencies": { + "node-html-parser": "^6.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha1-od95m4PfXGdD/NknQLoUaCCDt+Q=", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-html-parser/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha1-uOvWVUw2N8zHZoiAStP2pv2uqKY=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/node-html-parser/node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha1-+17/z3bx3eosgb36pN5E55uscPQ=", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/node-html-parser/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha1-5BuALh7t+fbK4YPOXmIteJ19jlM=", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha1-zDhff3UfHR/GUMITdIBCVFOMfTE=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha1-xH9VEnjT3EsLGrjLtC11Gm8Ngk4=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/node-html-parser/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", + "integrity": "sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-int64/-/node-int64-0.4.0.tgz", @@ -11500,6 +12389,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/open/-/open-8.4.2.tgz", + "integrity": "sha1-W1/+Ko95Pc0qrXPlUMuHtZywhPk=", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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", @@ -11573,6 +12480,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha1-5QHNMJSyeEletCWNTJ9tWsMBnwA=", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pako/-/pako-1.0.11.tgz", @@ -12095,6 +13009,16 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha1-a1PlatdViCNOefSv+pCXLH3Yzbc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/pure-rand": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pure-rand/-/pure-rand-6.0.2.tgz", @@ -12882,6 +13806,17 @@ "node": ">= 0.6" } }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha1-MtpWjoPqSIsI5NfqLDvMnXUBXVs=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, "node_modules/stream": { "version": "0.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/stream/-/stream-0.0.2.tgz", @@ -13587,8 +14522,9 @@ "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", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } @@ -13667,10 +14603,11 @@ } }, "node_modules/typed-rest-client": { - "version": "1.8.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", + "version": "1.8.11", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=", "dev": true, + "license": "MIT", "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", @@ -14778,48 +15715,356 @@ "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@azure-rest/ai-translation-text": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure-rest/ai-translation-text/-/ai-translation-text-1.0.0.tgz", + "integrity": "sha1-ZmT3YJ2e96FELKS9iyc0h0/qd4w=", + "dev": true, + "requires": { + "@azure-rest/core-client": "^1.1.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure-rest/core-client": { + "version": "1.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure-rest/core-client/-/core-client-1.4.0.tgz", + "integrity": "sha1-O+KMAsbCDknepzp/AS2u7aTqy44=", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.5.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=", + "dev": true, + "requires": { + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/core-auth": { + "version": "1.7.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha1-VYt8t90SsAvuwHrl31kH103x69k=", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/core-client": { + "version": "1.9.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha1-b8ac7igWiDq2xc3WU+5PL/l3T3Q=", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/core-rest-pipeline": { + "version": "1.16.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.3.tgz", + "integrity": "sha1-veO8PrrX+IXd2d5q9eWo/CVLKH4=", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.9.0", + "@azure/logger": "^1.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/core-tracing": { + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha1-Bl2rTgk/thiZmIoc28gn2a2QtO4=", + "dev": true, + "requires": { + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/core-util": { + "version": "1.9.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/core-util/-/core-util-1.9.2.tgz", + "integrity": "sha1-HcN9xbDa40xXi+Ys+YkFunwMr+c=", + "dev": true, + "requires": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } + } + }, + "@azure/identity": { + "version": "4.4.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/identity/-/identity-4.4.1.tgz", + "integrity": "sha1-SQ+irSZ4Yimvo2QRiSu1Pfo0eNM=", + "dev": true, + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.3.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.14.0", + "@azure/msal-node": "^2.9.2", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "jwa": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha1-p+nD8p2ulAJ+vK9Jl1yTRVk0EPw=", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jws/-/jws-4.0.0.tgz", + "integrity": "sha1-LU6M9qMY/6oSYV6d7H6G5slzEPQ=", + "dev": true, + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } } }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "@azure/logger": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/logger/-/logger-1.1.4.tgz", + "integrity": "sha1-Ijy/K0JN+mZHjOmk9XX1nG83l2g=", "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" + "requires": { + "tslib": "^2.6.2" }, - "engines": { - "node": ">= 10" + "dependencies": { + "tslib": { + "version": "2.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha1-2bQMXECrWehzjyl98wh78aJpDAE=", + "dev": true + } } }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "@azure/msal-browser": { + "version": "3.22.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/msal-browser/-/msal-browser-3.22.0.tgz", + "integrity": "sha1-5MJgX6wSvY8Xdhfld8WdFdEFVRM=", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "requires": { + "@azure/msal-common": "14.14.2" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + }, + "@azure/msal-common": { + "version": "14.14.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/msal-common/-/msal-common-14.14.2.tgz", + "integrity": "sha1-WDtKycCJlTcY16Xi87jfLU27F/Q=", + "dev": true + }, + "@azure/msal-node": { + "version": "2.13.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@azure/msal-node/-/msal-node-2.13.1.tgz", + "integrity": "sha1-8UQ3EnW3w8vlZHYrhHcqlzJFekc=", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@azure/msal-common": "14.14.2", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "dev": true + } } }, "@babel/code-frame": { @@ -17184,20 +18429,29 @@ } }, "@vscode/l10n-dev": { - "version": "0.0.30", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/l10n-dev/-/l10n-dev-0.0.30.tgz", - "integrity": "sha512-m/5voX3NtGCVQ/UjKajvwW9PPvjjvcuvEKiKRkf7dS8Q/JT+Sa5XJK70JrVuuwbfGwZktrBBhF25Eu9SXv4Q6A==", + "version": "0.0.35", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/l10n-dev/-/l10n-dev-0.0.35.tgz", + "integrity": "sha1-zdgQala33I/u9i0QxBPW2NlLLVw=", "dev": true, "requires": { + "@azure-rest/ai-translation-text": "^1.0.0-beta.1", "debug": "^4.3.4", "deepmerge-json": "^1.5.0", "glob": "^10.0.0", + "markdown-it": "^14.0.0", + "node-html-markdown": "^1.3.0", "pseudo-localization": "^2.4.0", "web-tree-sitter": "^0.20.8", "xml2js": "^0.5.0", "yargs": "^17.7.1" }, "dependencies": { + "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": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", + "dev": true + }, "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", @@ -17227,6 +18481,12 @@ "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", + "integrity": "sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=", + "dev": true + }, "glob": { "version": "10.3.10", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-10.3.10.tgz", @@ -17240,6 +18500,35 @@ "path-scurry": "^1.10.1" } }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha1-nvI4v6bccL2Of5VytS02mvVptCE=", + "dev": true, + "requires": { + "uc.micro": "^2.0.0" + } + }, + "markdown-it": { + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha1-PDxZkog8Yz20cUzLTXtZNdmLfUU=", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + } + }, + "mdurl": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha1-gGduwEMwJd0+F+6YPQ/o3loiN+A=", + "dev": true + }, "minimatch": { "version": "9.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.3.tgz", @@ -17255,6 +18544,12 @@ "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", + "integrity": "sha1-+NP30OxMPeo1p+PI76TLi0XJ5+4=", + "dev": true + }, "yargs": { "version": "17.7.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/yargs/-/yargs-17.7.2.tgz", @@ -17338,16 +18633,20 @@ } }, "@vscode/vsce": { - "version": "2.21.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce/-/vsce-2.21.0.tgz", - "integrity": "sha512-KuxYqScqUY/duJbkj9eE2tN2X/WJoGAy54hHtxT3ZBkM6IzrOg7H7CXGUPBxNlmqku2w/cAjOUSrgIHlzz0mbA==", + "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", + "integrity": "sha1-efpKJj65R31J77KTHUUgTj77y3g=", "dev": true, "requires": { - "azure-devops-node-api": "^11.0.1", + "@azure/identity": "^4.1.0", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", "chalk": "^2.4.2", "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", "commander": "^6.2.1", - "glob": "^7.0.6", + "form-data": "^4.0.0", + "glob": "^11.0.0", "hosted-git-info": "^4.0.2", "jsonc-parser": "^3.2.0", "keytar": "^7.7.0", @@ -17358,7 +18657,7 @@ "parse-semver": "^1.1.1", "read": "^1.0.7", "semver": "^7.5.2", - "tmp": "^0.2.1", + "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -17366,12 +18665,46 @@ "yazl": "^2.2.2" }, "dependencies": { + "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": { + "balanced-match": "^1.0.0" + } + }, "commander": { "version": "6.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-6.2.1.tgz", "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, + "glob": { + "version": "11.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-11.0.0.tgz", + "integrity": "sha1-YDHfDXtl6qHMubKbXO0WzqZY534=", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "dependencies": { + "minimatch": { + "version": "10.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha1-zgUhhWtFPIbiXyxMDQPm/33cRAs=", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -17381,32 +18714,128 @@ "lru-cache": "^6.0.0" } }, + "jackspeak": { + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha1-n8pM6WGvYIPiWcN26eNUFDH1KHs=", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jsonc-parser": { "version": "3.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "path-scurry": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha1-nwUiifI62L+Tl6KgQl57hhXFhYA=", "dev": true, "requires": { - "glob": "^7.1.3" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "dependencies": { + "lru-cache": { + "version": "11.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-11.0.0.tgz", + "integrity": "sha1-Fdk6GW8YkDTXFmyvn+Vec4TJiiE=", + "dev": true + } } }, "tmp": { - "version": "0.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "version": "0.2.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha1-63g8wivB6L69BnFHbUbqTrMqea4=", + "dev": true } } }, + "@vscode/vsce-sign": { + "version": "2.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz", + "integrity": "sha1-tL8VXRbypLrcBp34UNyG91YSSEI=", + "dev": true, + "requires": { + "@vscode/vsce-sign-alpine-arm64": "2.0.2", + "@vscode/vsce-sign-alpine-x64": "2.0.2", + "@vscode/vsce-sign-darwin-arm64": "2.0.2", + "@vscode/vsce-sign-darwin-x64": "2.0.2", + "@vscode/vsce-sign-linux-arm": "2.0.2", + "@vscode/vsce-sign-linux-arm64": "2.0.2", + "@vscode/vsce-sign-linux-x64": "2.0.2", + "@vscode/vsce-sign-win32-arm64": "2.0.2", + "@vscode/vsce-sign-win32-x64": "2.0.2" + } + }, + "@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz", + "integrity": "sha1-SszEheVapv8EsZW0f3IurVfapY4=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-alpine-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz", + "integrity": "sha1-Skt7UFtMwPWFljlIl8SaC84OVAw=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz", + "integrity": "sha1-EKpp/rf4Gj3GjCQgOMoD6v8ZwS4=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-darwin-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz", + "integrity": "sha1-MxVSjz6hAHpkizMgv/NqM6ngeqU=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-arm": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz", + "integrity": "sha1-QUL9qD5xMLMa7diqgeTapjNDI8I=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz", + "integrity": "sha1-zlxc/JnjRUtPt3BAWBK0a9bcqHA=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz", + "integrity": "sha1-WauT8yLvs89JFm1OLoEnicMRdCg=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-win32-arm64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz", + "integrity": "sha1-0JVwShSwQEwLb2lumInppRsxqGw=", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-win32-x64": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz", + "integrity": "sha1-KU6nK0T+3WlNSfXO9MVb84dtwlc=", + "dev": true, + "optional": true + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -17871,6 +19300,12 @@ "async-done": "^2.0.0" } }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "at-least-node": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/at-least-node/-/at-least-node-1.0.0.tgz", @@ -17888,9 +19323,9 @@ "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==" }, "azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", + "version": "12.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=", "dev": true, "requires": { "tunnel": "0.0.6", @@ -18534,6 +19969,12 @@ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, + "cockatiel": { + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha1-V1+Te8QECiCuJzUqbQfJxadBmB8=", + "dev": true + }, "collect-v8-coverage": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -18561,6 +20002,15 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-2.20.3.tgz", @@ -18778,6 +20228,12 @@ "integrity": "sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha1-P3rkIRKbyqrJvHSQXJigAJ7J7n8=", + "dev": true + }, "define-properties": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-properties/-/define-properties-1.2.0.tgz", @@ -18802,6 +20258,12 @@ "rimraf": "^2.2.8" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/depd/-/depd-1.1.2.tgz", @@ -18882,9 +20344,9 @@ } }, "domelementtype": { - "version": "2.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha1-XEXo6GmVJiYzHXqrMm0B2vZdWJ0=", "dev": true }, "domhandler": { @@ -20190,6 +21652,17 @@ } } }, + "form-data": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fs-constants": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fs-constants/-/fs-constants-1.0.0.tgz", @@ -20635,6 +22108,12 @@ "has-symbols": "^1.0.2" } }, + "he": { + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/he/-/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -20944,6 +22423,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-extglob/-/is-extglob-2.1.1.tgz", @@ -21130,6 +22615,15 @@ "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/isarray/-/isarray-1.0.0.tgz", @@ -23106,9 +24600,9 @@ "dev": true }, "minipass": { - "version": "7.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha1-k6libOXl5mvU24aEnnUV6SNApwc=", "dev": true }, "mkdirp": { @@ -23262,6 +24756,83 @@ "dev": true, "optional": true }, + "node-html-markdown": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-html-markdown/-/node-html-markdown-1.3.0.tgz", + "integrity": "sha1-7wsZo7v8DxqICruf8qDJqmu/8qk=", + "dev": true, + "requires": { + "node-html-parser": "^6.1.1" + } + }, + "node-html-parser": { + "version": "6.1.13", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha1-od95m4PfXGdD/NknQLoUaCCDt+Q=", + "dev": true, + "requires": { + "css-select": "^5.1.0", + "he": "1.2.0" + }, + "dependencies": { + "css-select": { + "version": "5.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha1-uOvWVUw2N8zHZoiAStP2pv2uqKY=", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha1-+17/z3bx3eosgb36pN5E55uscPQ=", + "dev": true + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha1-5BuALh7t+fbK4YPOXmIteJ19jlM=", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha1-zDhff3UfHR/GUMITdIBCVFOMfTE=", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha1-xH9VEnjT3EsLGrjLtC11Gm8Ngk4=", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "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", + "integrity": "sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=", + "dev": true + } + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-int64/-/node-int64-0.4.0.tgz", @@ -23443,6 +25014,17 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "8.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/open/-/open-8.4.2.tgz", + "integrity": "sha1-W1/+Ko95Pc0qrXPlUMuHtZywhPk=", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "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", @@ -23492,6 +25074,12 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha1-5QHNMJSyeEletCWNTJ9tWsMBnwA=", + "dev": true + }, "pako": { "version": "1.0.11", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pako/-/pako-1.0.11.tgz", @@ -23886,6 +25474,12 @@ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha1-a1PlatdViCNOefSv+pCXLH3Yzbc=", + "dev": true + }, "pure-rand": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pure-rand/-/pure-rand-6.0.2.tgz", @@ -24453,6 +26047,12 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stoppable": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha1-MtpWjoPqSIsI5NfqLDvMnXUBXVs=", + "dev": true + }, "stream": { "version": "0.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/stream/-/stream-0.0.2.tgz", @@ -24959,7 +26559,7 @@ "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", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", "dev": true }, "tunnel-agent": { @@ -25015,9 +26615,9 @@ } }, "typed-rest-client": { - "version": "1.8.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", + "version": "1.8.11", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=", "dev": true, "requires": { "qs": "^6.9.1", diff --git a/package.json b/package.json index 743c7159d..76cec5457 100644 --- a/package.json +++ b/package.json @@ -135,9 +135,9 @@ "@types/yauzl": "2.10.0", "@typescript-eslint/eslint-plugin": "^5.61.0", "@typescript-eslint/parser": "^5.61.0", - "@vscode/l10n-dev": "^0.0.30", + "@vscode/l10n-dev": "^0.0.35", "@vscode/test-electron": "2.3.8", - "@vscode/vsce": "2.21.0", + "@vscode/vsce": "3.0.0", "archiver": "5.3.0", "del": "3.0.0", "eslint": "^8.43.0", @@ -1384,7 +1384,7 @@ }, "dotnet.unitTests.runSettingsPath": { "type": "string", - "markdownDescription": "%configuration.dotnet.unitTests.runSettingsPath.markdownDescription%" + "markdownDescription": "%configuration.dotnet.unitTests.runSettingsPath%" } } }, From 8d881f8f32f452945d2d64f63ee1748c1421e818 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 28 Aug 2024 12:20:28 -0700 Subject: [PATCH 022/100] Add formatting integration tests --- .../formatting.integration.test.ts | 89 +++++++++++++++++ ...formattingEditorConfig.integration.test.ts | 95 +++++++++++++++++++ .../integrationTests/formattingTestHelpers.ts | 64 +++++++++++++ .../slnWithCsproj/src/app/Formatting.cs | 10 ++ .../app/folderWithEditorConfig/.editorconfig | 2 + .../FormattingWithEditorConfig.cs | 15 +++ .../workspaceDiagnostics.integration.test.ts | 2 +- 7 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 test/integrationTests/formatting.integration.test.ts create mode 100644 test/integrationTests/formattingEditorConfig.integration.test.ts create mode 100644 test/integrationTests/formattingTestHelpers.ts create mode 100644 test/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs create mode 100644 test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig create mode 100644 test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs diff --git a/test/integrationTests/formatting.integration.test.ts b/test/integrationTests/formatting.integration.test.ts new file mode 100644 index 000000000..144f915df --- /dev/null +++ b/test/integrationTests/formatting.integration.test.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 * as path from 'path'; +import testAssetWorkspace from './testAssets/testAssetWorkspace'; +import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; +import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; +import { expectText, formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; + +describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'app', 'Formatting.cs')); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Document formatting formats the entire document', async () => { + await formatDocumentAsync(); + + const expectedText = [ + 'namespace Formatting;', + 'class DocumentFormatting', + '{', + ' public int Property1', + ' {', + ' get; set;', + ' }', + '', + ' public void Method1()', + ' {', + ' System.Console.Write("");', + ' }', + '}', + ]; + expectText(expectedText); + }); + + test('Document range formatting formats only the range', async () => { + await formatRangeAsync(new vscode.Range(3, 0, 5, 0)); + + const expectedText = [ + 'namespace Formatting;', + 'class DocumentFormatting', + '{', + ' public int Property1', + ' {', + ' get; set;', + ' }', + '', + ' public void Method1() {', + ' System.Console.Write("");', + ' }', + '}', + ]; + expectText(expectedText); + }); + + test('Document on type formatting formats the typed location', async () => { + // The server expects the position to be the position after the inserted character `;` + await formatOnTypeAsync(new vscode.Position(7, 37), ';'); + + const expectedText = [ + 'namespace Formatting;', + 'class DocumentFormatting', + '{', + ' public int Property1 {', + ' get; set; }', + '', + ' public void Method1() {', + ' System.Console.Write("");', + ' }', + '}', + ]; + expectText(expectedText); + }); +}); diff --git a/test/integrationTests/formattingEditorConfig.integration.test.ts b/test/integrationTests/formattingEditorConfig.integration.test.ts new file mode 100644 index 000000000..3d7ccef51 --- /dev/null +++ b/test/integrationTests/formattingEditorConfig.integration.test.ts @@ -0,0 +1,95 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +import testAssetWorkspace from './testAssets/testAssetWorkspace'; +import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; +import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; +import { expectText, formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; + +describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync( + path.join('src', 'app', 'folderWithEditorConfig', 'FormattingWithEditorConfig.cs') + ); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Document formatting respects editorconfig', async () => { + await formatDocumentAsync(); + + const expectedText = [ + 'namespace Formatting;', + 'class DocumentFormattingWithEditorConfig {', + ' public int Property1 {', + ' get; set;', + ' }', + '', + ' public void Method1() {', + ' if (true) {', + ' }', + ' }', + '}', + ]; + expectText(expectedText); + }); + + test('Document range formatting respects editorconfig', async () => { + await formatRangeAsync(new vscode.Range(3, 0, 6, 0)); + + const expectedText = [ + 'namespace Formatting;', + 'class DocumentFormattingWithEditorConfig', + '{', + ' public int Property1 {', + ' get; set;', + ' }', + '', + ' public void Method1()', + ' {', + ' if (true)', + ' {', + ' }', + ' }', + '}', + ]; + expectText(expectedText); + }); + + test('Document on type formatting respects editorconfig', async () => { + // The server expects the position to be the position after the inserted character `}` + await formatOnTypeAsync(new vscode.Position(12, 9), '}'); + + const expectedText = [ + 'namespace Formatting;', + 'class DocumentFormattingWithEditorConfig', + '{', + ' public int Property1', + ' {', + ' get; set;', + ' }', + '', + ' public void Method1()', + ' {', + ' if (true) {', + ' }', + ' }', + '}', + ]; + expectText(expectedText); + }); +}); diff --git a/test/integrationTests/formattingTestHelpers.ts b/test/integrationTests/formattingTestHelpers.ts new file mode 100644 index 000000000..803c9fb78 --- /dev/null +++ b/test/integrationTests/formattingTestHelpers.ts @@ -0,0 +1,64 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { EOL } from 'os'; +import { expect } from '@jest/globals'; + +export async function formatDocumentAsync(): Promise { + const edits = await vscode.commands.executeCommand( + 'vscode.executeFormatDocumentProvider', + vscode.window.activeTextEditor!.document.uri, + { + insertSpaces: true, + tabSize: 4, + } + ); + + await applyEditsAsync(edits); +} + +export async function formatRangeAsync(range: vscode.Range): Promise { + const edits = await vscode.commands.executeCommand( + 'vscode.executeFormatRangeProvider', + vscode.window.activeTextEditor!.document.uri, + range, + { + insertSpaces: true, + tabSize: 4, + } + ); + + await applyEditsAsync(edits); +} + +export async function formatOnTypeAsync(position: vscode.Position, character: string): Promise { + const edits = await vscode.commands.executeCommand( + 'vscode.executeFormatOnTypeProvider', + vscode.window.activeTextEditor!.document.uri, + position, + character, + { + insertSpaces: true, + tabSize: 4, + } + ); + + await applyEditsAsync(edits); +} + +async function applyEditsAsync(edits: vscode.TextEdit[]): Promise { + expect(edits).toBeDefined(); + + const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); + workspaceEdit.set(vscode.window.activeTextEditor!.document.uri, edits); + const succeeded = await vscode.workspace.applyEdit(workspaceEdit); + expect(succeeded).toBe(true); +} + +export async function expectText(expectedLines: string[]) { + const expectedText = expectedLines.join(EOL); + expect(vscode.window.activeTextEditor!.document.getText()).toBe(expectedText); +} diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs new file mode 100644 index 000000000..2c669c6b4 --- /dev/null +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs @@ -0,0 +1,10 @@ +namespace Formatting; +class DocumentFormatting +{ + public int Property1 { + get; set; } + + public void Method1() { + System.Console.Write(""); + } +} \ No newline at end of file diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig b/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig new file mode 100644 index 000000000..5a164647b --- /dev/null +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig @@ -0,0 +1,2 @@ +[*.{cs}] +csharp_new_line_before_open_brace = none \ No newline at end of file diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs b/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs new file mode 100644 index 000000000..4910f0b4b --- /dev/null +++ b/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs @@ -0,0 +1,15 @@ +namespace Formatting; +class DocumentFormattingWithEditorConfig +{ + public int Property1 + { + get; set; + } + + public void Method1() + { + if (true) + { + } + } +} \ No newline at end of file diff --git a/test/integrationTests/workspaceDiagnostics.integration.test.ts b/test/integrationTests/workspaceDiagnostics.integration.test.ts index 4f442ee02..366be46d3 100644 --- a/test/integrationTests/workspaceDiagnostics.integration.test.ts +++ b/test/integrationTests/workspaceDiagnostics.integration.test.ts @@ -87,7 +87,7 @@ describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { }); await waitForExpectedDiagnostics((diagnostics) => { - expect(diagnostics).toHaveLength(31); + expect(diagnostics.length).toBeGreaterThan(2); const diagnosticsInDiagnosticsCs = diagnostics .filter(([uri, _]) => uri.fsPath.endsWith('diagnostics.cs')) From 9b80082a0b4f3dedb55b6db3aa50ade9d7f9ffeb Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 29 Aug 2024 12:02:34 -0700 Subject: [PATCH 023/100] Publish using managed identity --- azure-pipelines/install-node.yml | 5 ++ azure-pipelines/prereqs.yml | 5 +- azure-pipelines/release.yml | 101 +++++++++++++++---------------- 3 files changed, 56 insertions(+), 55 deletions(-) create mode 100644 azure-pipelines/install-node.yml diff --git a/azure-pipelines/install-node.yml b/azure-pipelines/install-node.yml new file mode 100644 index 000000000..72aaac84b --- /dev/null +++ b/azure-pipelines/install-node.yml @@ -0,0 +1,5 @@ +steps: +- task: NodeTool@0 + displayName: 'Install Node.js 20.x' + inputs: + versionSpec: '20.x' \ No newline at end of file diff --git a/azure-pipelines/prereqs.yml b/azure-pipelines/prereqs.yml index 368383244..09285359e 100644 --- a/azure-pipelines/prereqs.yml +++ b/azure-pipelines/prereqs.yml @@ -11,10 +11,7 @@ steps: # The server package is downloaded from NuGet - task: NuGetAuthenticate@1 -- task: NodeTool@0 - displayName: 'Install Node.js 20.x' - inputs: - versionSpec: '20.x' +- template: /azure-pipelines/install-node.yml@self # Some tests use predefined docker images with a specific version of .NET installed. # So we avoid installing .NET in those cases. diff --git a/azure-pipelines/release.yml b/azure-pipelines/release.yml index 9bbf100e9..3f8fa66ab 100644 --- a/azure-pipelines/release.yml +++ b/azure-pipelines/release.yml @@ -7,8 +7,6 @@ parameters: default: true variables: -# This is expected to provide VisualStudioMarketplacePAT to the release (https://code.visualstudio.com/api/working-with-extensions/publishing-extension#get-a-personal-access-token) -- group: vscode-csharp release secrets # This is expected to provide pat to tag release. - group: DncEng-Partners-Tokens @@ -55,59 +53,63 @@ extends: buildVersionToDownload: 'specific' buildId: '$(resources.pipeline.officialBuildCI.runID)' branchName: '$(resources.pipeline.officialBuildCI.sourceBranch)' + - template: /azure-pipelines/install-node.yml@self - pwsh: | - npm install --global vsce + npm install --global @vscode/vsce displayName: 'Install vsce' - - pwsh: | - # Choose whether to upload to prerelease or release based on the artifacts generated by the build pipeline. - $artifactFolder = "" - $uploadPrerelease = $true - if (Test-Path -Path "VSIX_Prerelease") { - $artifactFolder = "VSIX_Prerelease" - $uploadPrerelease = $true - } elseif (Test-Path -Path "VSIX_Release") { - $artifactFolder = "VSIX_Release" - $uploadPrerelease = $false - } else { - throw "No artifacts are downloaded." - } + - task: AzureCLI@2 + displayName: '🚀 Publish to Marketplace' + inputs: + azureSubscription: 'VSCode Marketplace Publishing' + scriptType: "pscore" + scriptLocation: 'inlineScript' + workingDirectory: $(Pipeline.Workspace) + inlineScript: | + # Choose whether to upload to prerelease or release based on the artifacts generated by the build pipeline. + $artifactFolder = "" + $uploadPrerelease = $true + if (Test-Path -Path "VSIX_Prerelease") { + $artifactFolder = "VSIX_Prerelease" + $uploadPrerelease = $true + } elseif (Test-Path -Path "VSIX_Release") { + $artifactFolder = "VSIX_Release" + $uploadPrerelease = $false + } else { + throw "No artifacts are downloaded." + } - Write-Host "Uploading artifacts from $artifactFolder with prerelease=$uploadPrerelease" + Write-Host "Uploading artifacts from $artifactFolder with prerelease=$uploadPrerelease" - # Our build pipeline would generated build based on attempt number. Publishing the latest attempt. - $allArtifacts = Get-ChildItem -Path "$artifactFolder*" | Sort-Object -Descending - if ($allArtifacts.Length -eq 0) { - throw "No artifacts in $artifactFolder" - } + # Our build pipeline would generated build based on attempt number. Publishing the latest attempt. + $allArtifacts = Get-ChildItem -Path "$artifactFolder*" | Sort-Object -Descending + if ($allArtifacts.Length -eq 0) { + throw "No artifacts in $artifactFolder" + } - $publishArtifacts = $allArtifacts[0] - Write-Host "All artifacts: $($allArtifacts). Publishing $($publishArtifacts)." + $publishArtifacts = $allArtifacts[0] + Write-Host "All artifacts: $($allArtifacts). Publishing $($publishArtifacts)." - $basePublishArgs = , "publish" - If ( $uploadPrerelease ) { - $basePublishArgs += "--pre-release" - Write-Host "Publish to pre-release channel." - } Else { - Write-Host "Publish to release channel." - } - $basePublishArgs += '--packagePath' - $publishArgs = $basePublishArgs + (Get-ChildItem $publishArtifacts\*.vsix | Sort-Object Name -Descending |% { $_ }) + $basePublishArgs = , "publish --azure-credential" + If ( $uploadPrerelease ) { + $basePublishArgs += "--pre-release" + Write-Host "Publish to pre-release channel." + } Else { + Write-Host "Publish to release channel." + } + $basePublishArgs += '--packagePath' + $publishArgs = $basePublishArgs + (Get-ChildItem $publishArtifacts\*.vsix | Sort-Object Name -Descending |% { $_ }) - If ("${{ parameters.test }}" -eq "true") { - Write-Host "In test mode, command is printed instead of run." - Write-Host "##[command]vsce $publishArgs" + If ("${{ parameters.test }}" -eq "true") { + Write-Host "In test mode, command is printed instead of run." + Write-Host "##[command]vsce $publishArgs" - Write-Host "🔒 Verify PAT." - vsce verify-pat ms-dotnettools - } - Else { - Write-Host "##[command]vsce $publishArgs" - vsce @publishArgs - } - displayName: 🚀 Publish to Marketplace - workingDirectory: $(Pipeline.Workspace) - env: - VSCE_PAT: $(VSCodeMarketplacePAT) + Write-Host "🔒 Verify PAT." + vsce verify-pat --azure-credential ms-dotnettools + } + Else { + Write-Host "##[command]vsce $publishArgs" + vsce @publishArgs + } - stage: 'TagRelease' displayName: 'Tag release of vscode-csharp' dependsOn: 'PublishStage' @@ -119,15 +121,12 @@ extends: image: 1es-ubuntu-2204 os: linux steps: - - task: NodeTool@0 - displayName: 'Install Node.js 18.x' - inputs: - versionSpec: '18.x' - checkout: self clean: true submodules: true fetchTags: false fetchDepth: 0 + - template: /azure-pipelines/install-node.yml@self - pwsh: | git checkout $(resources.pipeline.officialBuildCI.sourceCommit) displayName: 'Checkout build source branch' From 73e9b24d65c7503877a53302cff33b4a2e6ae224 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 30 Aug 2024 14:38:32 -0700 Subject: [PATCH 024/100] Update Roslyn to 4.12.0-3.24430.2 --- CHANGELOG.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 636f6dcd7..5a6229539 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Update Roslyn to 4.12.0-3.24430.2 (PR: [#7496](https://github.com/dotnet/vscode-csharp/pull/7496)) * Bump Razor to 9.0.0-preview.24427.2 (PR: [#7471](https://github.com/dotnet/vscode-csharp/pull/7471)) * Suppress unique ids (#10791) (PR: [#10791](https://github.com/dotnet/razor/pull/10791)) * Self-versioned documents (#10747) (PR: [#10747](https://github.com/dotnet/razor/pull/10747)) diff --git a/package.json b/package.json index 5e42fa3c5..d35aeff96 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.12.0-2.24422.6", + "roslyn": "4.12.0-3.24430.2", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24427.2", "razorOmnisharp": "7.0.0-preview.23363.1", From 7c3544add6ec7a1d73e0346f9022a7b987ff75a7 Mon Sep 17 00:00:00 2001 From: dibarbet Date: Fri, 30 Aug 2024 23:22:34 +0000 Subject: [PATCH 025/100] Update main version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index d62265b7f..4ff89a79c 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.46", + "version": "2.47", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 2a024e1c9c20fab9870299c0100a811e742ae117 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 30 Aug 2024 16:29:25 -0700 Subject: [PATCH 026/100] Update webpack for dependabot issue --- package-lock.json | 738 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 360 insertions(+), 380 deletions(-) diff --git a/package-lock.json b/package-lock.json index a369f8fa9..b3e8fbe0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,7 +94,7 @@ "vscode-oniguruma": "^1.6.1", "vscode-textmate": "^6.0.0", "vscode-uri": "^3.0.7", - "webpack": "5.76.0", + "webpack": "5.94.0", "webpack-cli": "4.6.0" }, "engines": { @@ -2128,14 +2128,15 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha1-3M5q/3S99trRqVgCtpsEovyx+zY=", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -2151,22 +2152,24 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha1-VY+2Ry7RakyFC4iVMOazZDjEkoA=", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha1-nXHKiG4yUC65NiyadKRnh8Nt+Bo=", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2176,10 +2179,11 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha1-FfGQ6YiV8/wjJ27hS8drZ1wuUPA=", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2871,31 +2875,12 @@ "@types/glob": "*" } }, - "node_modules/@types/eslint": { - "version": "8.21.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/eslint/-/eslint-8.21.1.tgz", - "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "version": "1.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha1-ps4+VW4A/ZiV3Yct0XKtDUvWh/Q=", + "dev": true, + "license": "MIT" }, "node_modules/@types/expect": { "version": "1.20.4", @@ -4137,148 +4122,163 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha1-uxag6LGRT5efRYZMI4Gcw+Pw1Ls=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha1-2svLla/xNcgmD3f6O0xf6mAKZDE=", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha1-YTL2jErNWdzRQcRLGMvrvZ8vp2g=", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha1-bfINJy6lQ5vyCrNJK3+3Dpv8s/Y=", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha1-y85efgwb0yz0kFrkRO9kzqkZ8bU=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha1-uy69s7g6om2bqtTEbUMVKDrNUek=", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha1-PaYjIzrhpgQJtQmlKt6bwio3978=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha1-u2ZckdCxT//OsOOCmMMprwQ8bjo=", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha1-cOYOXoL5rIERi8JTgaCyg4kyQNc=", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha1-kPi8NMVhWV/hVmA75yU8280Pq1o=", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha1-n58/9SoUyYCTm+DvnV3568Z4rjs=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha1-plIGAdobVwBEgnNmanGtCkXXhUc=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha1-nm6BR138+2LatXSsLdo4ImwjK8U=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha1-xHrLkObwgzkeP6YdETZQ7qHpWTc=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha1-vOz2YdfRq9r5idg0Gkgz4z4rMaw=", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -4321,14 +4321,16 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true, + "license": "Apache-2.0" }, "node_modules/acorn": { "version": "8.8.2", @@ -4342,11 +4344,12 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha1-frFVexugXvGLXtDsZ1kb+rBGiO8=", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -4424,8 +4427,9 @@ "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -5643,8 +5647,9 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true, + "license": "MIT" }, "node_modules/compress-commons": { "version": "4.1.0", @@ -6230,10 +6235,11 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.17.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha1-Z7+7zC+B1RG+d9aGqQJn73+JihU=", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6342,10 +6348,11 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "version": "1.5.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha1-qO/sOj2pkeYO+mtjOnytarjSa3g=", + "dev": true, + "license": "MIT" }, "node_modules/es-set-tostringtag": { "version": "2.0.1", @@ -8141,6 +8148,13 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/glob-watcher": { "version": "6.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-watcher/-/glob-watcher-6.0.0.tgz", @@ -11201,8 +11215,9 @@ "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "integrity": "sha1-jRRvCQDolzsQa29zzB6ajLhvjbA=", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11215,8 +11230,9 @@ "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11224,8 +11240,9 @@ "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13089,8 +13106,9 @@ "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -13520,10 +13538,11 @@ "dev": true }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha1-9QqIh3w8AWUqFbYirp6Xld96YP4=", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -13577,10 +13596,11 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha1-3voeBVyDv21Z6oBdjahiJU62psI=", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -14150,13 +14170,14 @@ } }, "node_modules/terser": { - "version": "5.16.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser/-/terser-5.16.4.tgz", - "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", + "version": "5.31.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser/-/terser-5.31.6.tgz", + "integrity": "sha1-xjhYoPBwOYjQJmqC/L8te6dkIrE=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -14168,16 +14189,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha1-kE9MkZPG/SoD9pOiFQxiqS9A0Zk=", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -15146,10 +15168,11 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha1-L+6u1nQS58MxhOWnnKc4+9OFZNo=", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15158,12 +15181,6 @@ "node": ">=10.13.0" } }, - "node_modules/watchpack/node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, "node_modules/web-tree-sitter": { "version": "0.20.8", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", @@ -15171,34 +15188,34 @@ "dev": true }, "node_modules/webpack": { - "version": "5.76.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "version": "5.94.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha1-d6YInHFuerkMHGdXSijaUYoglw8=", "dev": true, + "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -15408,12 +15425,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, "node_modules/which": { "version": "1.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/which/-/which-1.3.1.tgz", @@ -17284,14 +17295,14 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha1-3M5q/3S99trRqVgCtpsEovyx+zY=", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -17301,19 +17312,19 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha1-VY+2Ry7RakyFC4iVMOazZDjEkoA=", "dev": true }, "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha1-nXHKiG4yUC65NiyadKRnh8Nt+Bo=", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "@jridgewell/sourcemap-codec": { @@ -17323,9 +17334,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha1-FfGQ6YiV8/wjJ27hS8drZ1wuUPA=", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -17902,30 +17913,10 @@ "@types/glob": "*" } }, - "@types/eslint": { - "version": "8.21.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/eslint/-/eslint-8.21.1.tgz", - "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "1.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha1-ps4+VW4A/ZiV3Yct0XKtDUvWh/Q=", "dev": true }, "@types/expect": { @@ -18837,148 +18828,148 @@ "optional": true }, "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha1-uxag6LGRT5efRYZMI4Gcw+Pw1Ls=", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha1-2svLla/xNcgmD3f6O0xf6mAKZDE=", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha1-YTL2jErNWdzRQcRLGMvrvZ8vp2g=", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha1-bfINJy6lQ5vyCrNJK3+3Dpv8s/Y=", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha1-y85efgwb0yz0kFrkRO9kzqkZ8bU=", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha1-uy69s7g6om2bqtTEbUMVKDrNUek=", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha1-PaYjIzrhpgQJtQmlKt6bwio3978=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha1-u2ZckdCxT//OsOOCmMMprwQ8bjo=", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha1-cOYOXoL5rIERi8JTgaCyg4kyQNc=", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha1-kPi8NMVhWV/hVmA75yU8280Pq1o=", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha1-n58/9SoUyYCTm+DvnV3568Z4rjs=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha1-plIGAdobVwBEgnNmanGtCkXXhUc=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha1-nm6BR138+2LatXSsLdo4ImwjK8U=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha1-xHrLkObwgzkeP6YdETZQ7qHpWTc=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha1-vOz2YdfRq9r5idg0Gkgz4z4rMaw=", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -19008,13 +18999,13 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", "dev": true }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", "dev": true }, "acorn": { @@ -19023,10 +19014,10 @@ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha1-frFVexugXvGLXtDsZ1kb+rBGiO8=", "dev": true, "requires": {} }, @@ -19085,7 +19076,7 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", "dev": true, "requires": {} }, @@ -20014,7 +20005,7 @@ "commander": { "version": "2.20.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", "dev": true }, "compress-commons": { @@ -20461,9 +20452,9 @@ } }, "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.17.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha1-Z7+7zC+B1RG+d9aGqQJn73+JihU=", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -20551,9 +20542,9 @@ } }, "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "version": "1.5.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha1-qO/sOj2pkeYO+mtjOnytarjSa3g=", "dev": true }, "es-set-tostringtag": { @@ -21863,6 +21854,12 @@ } } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=", + "dev": true + }, "glob-watcher": { "version": "6.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-watcher/-/glob-watcher-6.0.0.tgz", @@ -24072,7 +24069,7 @@ "jest-worker": { "version": "27.5.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "integrity": "sha1-jRRvCQDolzsQa29zzB6ajLhvjbA=", "dev": true, "requires": { "@types/node": "*", @@ -24083,13 +24080,13 @@ "has-flag": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", "dev": true }, "supports-color": { "version": "8.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -25516,7 +25513,7 @@ "randombytes": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -25839,9 +25836,9 @@ "dev": true }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha1-9QqIh3w8AWUqFbYirp6Xld96YP4=", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -25873,9 +25870,9 @@ "dev": true }, "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha1-3voeBVyDv21Z6oBdjahiJU62psI=", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -26311,28 +26308,28 @@ } }, "terser": { - "version": "5.16.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser/-/terser-5.16.4.tgz", - "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", + "version": "5.31.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser/-/terser-5.31.6.tgz", + "integrity": "sha1-xjhYoPBwOYjQJmqC/L8te6dkIrE=", "dev": true, "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" } }, "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha1-kE9MkZPG/SoD9pOiFQxiqS9A0Zk=", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" } }, "test-exclude": { @@ -27051,21 +27048,13 @@ } }, "watchpack": { - "version": "2.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha1-L+6u1nQS58MxhOWnnKc4+9OFZNo=", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" - }, - "dependencies": { - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - } } }, "web-tree-sitter": { @@ -27075,43 +27064,34 @@ "dev": true }, "webpack": { - "version": "5.76.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "version": "5.94.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha1-d6YInHFuerkMHGdXSijaUYoglw8=", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" - }, - "dependencies": { - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - } } }, "webpack-cli": { diff --git a/package.json b/package.json index d35aeff96..a888502b3 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "vscode-oniguruma": "^1.6.1", "vscode-textmate": "^6.0.0", "vscode-uri": "^3.0.7", - "webpack": "5.76.0", + "webpack": "5.94.0", "webpack-cli": "4.6.0" }, "runtimeDependencies": [ From 7c8a3addd8ec12fb6f63db0c06cdf9283fb143d2 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Tue, 3 Sep 2024 22:13:46 -0700 Subject: [PATCH 027/100] Fix up Node version --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 26cf4ddec..1ac4d060d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ Setting up your local development environment for the vscode-csharp repository i Before you start, make sure you have the following software installed on your machine: -* Node.js v18 ([v18.17.0 LTS](https://nodejs.org/en/blog/release/v20.17.0)). +* Node.js v20 ([v20.17.0 LTS](https://nodejs.org/en/blog/release/v20.17.0)). * Note - Building with higher major versions of Node.js is not advised - it may work but we do not test it. * Npm (The version shipped with node is fine) * .NET 8.0 SDK (dotnet should be on your path) From 936e14fff69ad6bc3c0bc0306218949379242319 Mon Sep 17 00:00:00 2001 From: Evgeny Tvorun Date: Wed, 4 Sep 2024 07:12:49 -0700 Subject: [PATCH 028/100] Bump xamlTools to 17.12.35303.261 --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a6229539..4bbc45928 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) -* Bump xamltools to 17.12.35230.10 (PR: [#7493](https://github.com/dotnet/vscode-csharp/pull/7493)) +* Bump xamltools to 17.12.35303.261 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7507)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) diff --git a/package.json b/package.json index a888502b3..f3bc26eba 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.35230.10" + "xamlTools": "17.12.35303.261" }, "main": "./dist/extension", "l10n": "./l10n", From ad4bda430b11388ab0461dabece70518e74b8c03 Mon Sep 17 00:00:00 2001 From: Evgeny Tvorun Date: Wed, 4 Sep 2024 10:14:40 -0700 Subject: [PATCH 029/100] Bump xamlTools to 17.12.35304.30 --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bbc45928..b2e200516 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) -* Bump xamltools to 17.12.35303.261 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7507)) +* Bump xamltools to 17.12.35304.30 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7508)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) diff --git a/package.json b/package.json index f3bc26eba..1bda21a8c 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.35303.261" + "xamlTools": "17.12.35304.30" }, "main": "./dist/extension", "l10n": "./l10n", From 816e0532091170b893aef3caf4467999b5cc63ed Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 4 Sep 2024 11:00:43 -0700 Subject: [PATCH 030/100] fixup changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2e200516..2c1c4b5e5 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.35304.30 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7508)) + +# 2.46.x * Update Roslyn to 4.12.0-3.24430.2 (PR: [#7496](https://github.com/dotnet/vscode-csharp/pull/7496)) * Bump Razor to 9.0.0-preview.24427.2 (PR: [#7471](https://github.com/dotnet/vscode-csharp/pull/7471)) * Suppress unique ids (#10791) (PR: [#10791](https://github.com/dotnet/razor/pull/10791)) @@ -14,7 +17,7 @@ * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) -* Bump xamltools to 17.12.35304.30 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7508)) +* Bump xamltools to 17.12.35230.10 (PR: [#7493](https://github.com/dotnet/vscode-csharp/pull/7493)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) From 481311d11ec941a454d487923dc82e72aa636932 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 4 Sep 2024 10:46:00 -0700 Subject: [PATCH 031/100] Merge pull request #7508 from etvorun/dev/evgenyt/bump_xamlTools2 Bump xamlTools to 17.12.35304.30 --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a6229539..b2e200516 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ * Update NOTICE.txt (#10768) (PR: [#10768](https://github.com/dotnet/razor/pull/10768)) * Allow @@ as a fallback (#10752) (PR: [#10752](https://github.com/dotnet/razor/pull/10752)) * Support component rename from an end tag (#10762) (PR: [#10762](https://github.com/dotnet/razor/pull/10762)) -* Bump xamltools to 17.12.35230.10 (PR: [#7493](https://github.com/dotnet/vscode-csharp/pull/7493)) +* Bump xamltools to 17.12.35304.30 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7508)) # 2.45.17 * Fix check for rzls being present (PR: [#7462](https://github.com/dotnet/vscode-csharp/pull/7462)) diff --git a/package.json b/package.json index d35aeff96..51e7a9f9f 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.35230.10" + "xamlTools": "17.12.35304.30" }, "main": "./dist/extension", "l10n": "./l10n", From 66ef98ca62d929f7c7cf285907dd7dcb2634fef7 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 4 Sep 2024 16:10:53 -0400 Subject: [PATCH 032/100] Added Building step to CONTRIBUTING.md For new contributors, it may be necessary to run `vsts-npm-auth -config .npmrc` before `npm i -g gulp` --- CONTRIBUTING.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1ac4d060d..a6ba7e542 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,9 +36,10 @@ Follow these steps to build, run, and test the repository: #### Building 1. Run `npm i` - This command installs the project dependencies. -2. Run `npm i -g gulp` - This command installs Gulp globally. -3. Run `gulp installDependencies` - This command downloads the various dependencies as specified by the version in the [package.json](package.json) file. -4. Run `code .` - This command opens the project in Visual Studio Code. +2. Run `vsts-npm-auth -config .npmrc` - This command will configure your credentials for the next command. +3. Run `npm i -g gulp` - This command installs Gulp globally. +4. Run `gulp installDependencies` - This command downloads the various dependencies as specified by the version in the [package.json](package.json) file. +5. Run `code .` - This command opens the project in Visual Studio Code. #### Running From 9e0b5f5fd43d12db6fc9e9b2e7f07b2929908766 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 28 Aug 2024 18:06:45 -0700 Subject: [PATCH 033/100] Add signing support to VSIX --- .gitignore | 2 + .vscodeignore | 5 +- Directory.Build.props | 1 + server/NuGet.config => NuGet.config | 0 azure-pipelines-official.yml | 8 ++ azure-pipelines.yml | 1 + azure-pipelines/build-all.yml | 44 ++++++++- azure-pipelines/build.yml | 35 ++++++- azure-pipelines/release.yml | 4 + global.json | 5 + gulpfile.ts | 1 + msbuild/Directory.Build.props | 6 ++ .../server}/ServerDownload.csproj | 9 +- msbuild/signing/SIGNING.md | 32 +++++++ msbuild/signing/signJs/signJs.proj | 25 +++++ msbuild/signing/signVsix/signVsix.proj | 34 +++++++ package.json | 2 +- tasks/offlinePackagingTasks.ts | 7 +- tasks/signingTasks.ts | 92 +++++++++++++++++++ tasks/vsceTasks.ts | 39 ++++++-- 20 files changed, 326 insertions(+), 26 deletions(-) rename server/NuGet.config => NuGet.config (100%) create mode 100644 global.json create mode 100644 msbuild/Directory.Build.props rename {server => msbuild/server}/ServerDownload.csproj (61%) create mode 100644 msbuild/signing/SIGNING.md create mode 100644 msbuild/signing/signJs/signJs.proj create mode 100644 msbuild/signing/signVsix/signVsix.proj create mode 100644 tasks/signingTasks.ts diff --git a/.gitignore b/.gitignore index 96666a4b0..a0b5317fc 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ out .razortelemetry/ .razorDevKit/ .vscode-test/ +msbuild/signing/signJs/*.log +msbuild/signing/signVsix/*.log dist/ *.razor.json diff --git a/.vscodeignore b/.vscodeignore index dacfc4c57..15283ebbb 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -14,7 +14,7 @@ .vscode-test/** coverage/** out/** -server/** +msbuild/** src/** tasks/** test/** @@ -34,6 +34,9 @@ azure-pipelines .editorconfig .gitignore CODEOWNERS +Directory.Build.props +global.json +NuGet.config gulpfile.ts !install.Lock ISSUE_TEMPLATE diff --git a/Directory.Build.props b/Directory.Build.props index e539c06ca..3720f4d06 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,6 @@ + $(MSBuildThisFileDirectory) - + - ../out/.nuget/ - - $(RestorePackagesPath)obj/ - - $(LowestSupportedTargetFramework) + ../../out/.nuget/ + netstandard2.0 true diff --git a/msbuild/signing/SIGNING.md b/msbuild/signing/SIGNING.md new file mode 100644 index 000000000..4928a851c --- /dev/null +++ b/msbuild/signing/SIGNING.md @@ -0,0 +1,32 @@ +# Overview +The C# extension needs to be signed with MSFT signatures in order to be uploaded to the marketplace. + +Server side components should be signed when those artifacts are generated (e.g. Roslyn build signs Roslyn artifacts). However we also need to sign the artifacts we generate in the extension- +1. The extension JS code. +2. The VSIX's we produce +3. For MSFT publishing, we must also generate a signed manifest. + +Official builds are responsible for signing. We only real sign builds from the `prerelease` or `release` branches, everything else is test signed. + +## Signing Steps + +### Signing JS +As part of packaging, the extension TS/JS code is compiled/minified into the `dist/` folder which gets distributed inside the VSIX. The contents of `dist/` are generated by the `vscode:prepublish` NPM target, which is run by `vsce` during packaging. + +After the JS code is generated, but before it gets packaged we need to sign it. This is handled by running the `gulp signJs` target as a part of `vscode:prepublish`. Internally the gulp task delegates to the `signJs/signJs.proj` project to configure what and how to sign using MicroBuild. + +### Signing VSIX +Once we've generated the VSIX with the signed JS contents, we also need to sign the VSIX. VSIX signing for VSCode is a bit different from VS. Instead of submitting the VSIX itself to be signed, we submit a copy of the manifest file to the signing service. + +To do this, as the last step of VSIX packaging (in `gulp vsix:release:package`) we call out to `vsce generate-manifest` to generate the manifest file for each VSIX. Once the task is finished, every `.vsix` will be paired with a `.manifest` file inside the `vsix/` folder. + +The next step is to copy the manifest file to a `.signature.p7s` file which gets submitted to the signing service (and replaced with the signed version). The `signVsix.proj` (invoked via the `gulp signVsix` task) copies and transforms the manifest file and submits it to the signing service. + +Finally, when we actually publish the extension, we must pass upload the vsix, manifest file, and signed signature file to `vsce`. + +# Running test signing locally +To test various signing workflows, you may need to run signing locally. + +1. Run `gulp installSignPlugin` - this will install the MicroBuild signing plugin to your global nuget packages directory. This is required to make the signing targets on the various signing projects actually run. In CI, this is installed via a pipeline step. +2. To test JS signing, run `npm run vscode:prepublish` (or the `gulp signJs` task to skip generation of `dist/`). You can verify the JS is signed by checking for the 'Digital Signatures' tab on the file properties in Windows. The binlog, in `out/logs/signJs.binlog` will have details on the signing that took place. If you do not see a 'Sign' target running, then signing did not run. +3. To test VSIX signing, first generate the VSIX's as normal. Then run the `gulp signVsix` target. If signing ran successfully, the VSIX's should be updated in-place and have a `package/services/digital-signature` folder inside of them. For more details on the signing, see the `out/logs/signVsix.binlog`. \ No newline at end of file diff --git a/msbuild/signing/signJs/signJs.proj b/msbuild/signing/signJs/signJs.proj new file mode 100644 index 000000000..c2cd51806 --- /dev/null +++ b/msbuild/signing/signJs/signJs.proj @@ -0,0 +1,25 @@ + + + netstandard2.0 + false + false + true + false + $(JSOutputPath) + true + + + + + + + + test + + + + + MicrosoftSHA2 + + + \ No newline at end of file diff --git a/msbuild/signing/signVsix/signVsix.proj b/msbuild/signing/signVsix/signVsix.proj new file mode 100644 index 000000000..820294384 --- /dev/null +++ b/msbuild/signing/signVsix/signVsix.proj @@ -0,0 +1,34 @@ + + + netstandard2.0 + false + false + true + false + $(RepoRoot)vsix\ + + + + + + + + test + + + + + + + + + + + + VSCodePublisher + + + + \ No newline at end of file diff --git a/package.json b/package.json index d35aeff96..8e9bcbb78 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ } ], "scripts": { - "vscode:prepublish": "tsc -p ./ && webpack --mode production", + "vscode:prepublish": "tsc -p ./ && webpack --mode production && gulp signJs", "l10nDevGenerateLocalizationBundle": "npx @vscode/l10n-dev export --outDir ./l10n ./src", "compile": "tsc -p ./ && npx eslint ./ && npm run l10nDevGenerateLocalizationBundle && npm run compile:razorTextMate", "compile:razorTextMate": "npx js-yaml src/razor/syntaxes/aspnetcorerazor.tmLanguage.yml > src/razor/syntaxes/aspnetcorerazor.tmLanguage.json", diff --git a/tasks/offlinePackagingTasks.ts b/tasks/offlinePackagingTasks.ts index e8dd890cc..f631a3e2f 100644 --- a/tasks/offlinePackagingTasks.ts +++ b/tasks/offlinePackagingTasks.ts @@ -29,7 +29,7 @@ import { razorDevKitDirectory, } from '../tasks/projectPaths'; import { getPackageJSON } from '../tasks/packageJson'; -import { createPackageAsync } from '../tasks/vsceTasks'; +import { createPackageAsync, generateVsixManifest } from '../tasks/vsceTasks'; import { isValidDownload } from '../src/packageManager/isValidDownload'; import path = require('path'); import { CancellationToken } from 'vscode'; @@ -292,7 +292,7 @@ async function restoreNugetPackage(packageName: string, packageVersion: string, const dotnetArgs = [ 'restore', - path.join(rootPath, 'server'), + path.join(rootPath, 'msbuild', 'server'), `/p:PackageName=${packageName}`, `/p:PackageVersion=${packageVersion}`, ]; @@ -380,7 +380,8 @@ async function buildVsix(packageJSON: any, outputFolder: string, prerelease: boo } const packageFileName = getPackageName(packageJSON, platformInfo?.vsceTarget); - await createPackageAsync(outputFolder, prerelease, packageFileName, platformInfo?.vsceTarget); + const packagePath = await createPackageAsync(outputFolder, prerelease, packageFileName, platformInfo?.vsceTarget); + await generateVsixManifest(packagePath); } function getPackageName(packageJSON: any, vscodePlatformId?: string) { diff --git a/tasks/signingTasks.ts b/tasks/signingTasks.ts new file mode 100644 index 000000000..f9a08ecaa --- /dev/null +++ b/tasks/signingTasks.ts @@ -0,0 +1,92 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as cp from 'child_process'; +import * as fs from 'fs'; +import * as gulp from 'gulp'; +import { rootPath } from './projectPaths'; +import path = require('path'); +// There are no typings for this library. +// eslint-disable-next-line @typescript-eslint/no-var-requires +//const argv = require('yargs').argv; + +gulp.task('signJs', async () => { + await signJs(); +}); + +gulp.task('signVsix', async () => { + await signVsix(); +}); + +// Development task to install the signing plugin locally. +// Required to run test sigining tasks locally. +gulp.task('installSignPlugin', async () => { + await installSignPlugin(); +}); + +async function installSignPlugin(): Promise { + console.log(`Installing MicroBuild.Plugins.Signing`); + await execDotnet([ + 'restore', + path.join(rootPath, 'msbuild', 'server'), + // MicroBuild is expecting the signing plugin to be in the global package folder, so ensure it gets downloaded there. + `/p:DownloadToGlobalNugetFolder=true`, + `/p:PackageName=MicroBuild.Plugins.Signing`, + `/p:PackageVersion=1.1.950`, + `/p:RestoreSources=https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json`, + ]); +} + +async function signJs(): Promise { + const logPath = getLogPath(); + if (process.env.SignType === 'test' && process.platform !== 'win32') { + console.log('Test signing is not supported on non-windows platforms. Skipping JS signing.'); + return; + } + console.log(`Signing JS as ${process.env.SignType}`); + await execDotnet([ + 'build', + path.join(rootPath, 'msbuild', 'signing', 'signJs'), + `-bl:${path.join(logPath, 'signJs.binlog')}`, + `/p:JSOutputPath=${path.join(rootPath, 'dist')}`, + ]); +} + +async function signVsix(): Promise { + const logPath = getLogPath(); + if (process.env.SignType === 'test' && process.platform !== 'win32') { + console.log('Test signing is not supported on non-windows platforms. Skipping VSIX signing.'); + return; + } + console.log(`Signing VSIX as ${process.env.SignType}`); + await execDotnet([ + 'build', + path.join(rootPath, 'msbuild', 'signing', 'signVsix'), + `-bl:${path.join(logPath, 'signVsix.binlog')}`, + ]); +} + +function getLogPath(): string { + const logPath = path.join(rootPath, 'out', 'logs'); + if (!fs.existsSync(logPath)) { + fs.mkdirSync(logPath, { recursive: true }); + } + return logPath; +} + +async function execDotnet(args: string[]): Promise { + const dotnetArgs = args.join(' '); + console.log(`dotnet args: dotnet ${dotnetArgs}`); + const process = cp.spawn('dotnet', args, { stdio: 'inherit' }); + + await new Promise((resolve) => { + process.on('exit', (exitCode, _) => { + if (exitCode !== 0) { + throw new Error(`Failed to run command: dotnet ${dotnetArgs}`); + } + resolve(undefined); + }); + }); +} diff --git a/tasks/vsceTasks.ts b/tasks/vsceTasks.ts index ad45cc72d..ce109ac77 100644 --- a/tasks/vsceTasks.ts +++ b/tasks/vsceTasks.ts @@ -13,9 +13,9 @@ import { vscePath } from './projectPaths'; export async function createPackageAsync( outputFolder: string, prerelease: boolean, - packageName?: string, + packageName: string, vscodePlatformId?: string -) { +): Promise { const vsceArgs = []; let packagePath = undefined; @@ -31,13 +31,8 @@ export async function createPackageAsync( } vsceArgs.push('-o'); - if (packageName !== undefined) { - //if we have specified an output folder then put the files in that output folder - packagePath = path.join(outputFolder, packageName); - vsceArgs.push(packagePath); - } else { - vsceArgs.push(outputFolder); - } + packagePath = path.join(outputFolder, packageName); + vsceArgs.push(packagePath); if (vscodePlatformId !== undefined) { vsceArgs.push('--target'); @@ -60,4 +55,30 @@ export async function createPackageAsync( throw new Error(`vsce failed to create: '${packagePath}'`); } } + + return packagePath; +} + +export async function generateVsixManifest(vsixPath: string) { + const vsceArgs = []; + if (!(await util.fileExists(vscePath))) { + throw new Error(`vsce does not exist at expected location: '${vscePath}'`); + } + + vsceArgs.push(vscePath); + vsceArgs.push('generate-manifest'); + vsceArgs.push('--packagePath'); + vsceArgs.push(vsixPath); + + const parsed = path.parse(vsixPath); + const outputFolder = parsed.dir; + const vsixNameWithoutExtension = parsed.name; + + vsceArgs.push('-o'); + vsceArgs.push(path.join(outputFolder, `${vsixNameWithoutExtension}.manifest`)); + + const spawnResult = await spawnNode(vsceArgs); + if (spawnResult.code != 0) { + throw new Error(`'${vsceArgs.join(' ')}' failed with code ${spawnResult.code}.`); + } } From 589352643d547b33979f4e83eb20d17551673eef Mon Sep 17 00:00:00 2001 From: Evgeny Tvorun Date: Thu, 5 Sep 2024 11:02:38 -0700 Subject: [PATCH 034/100] Turn off word suggestions in XAML completions --- package.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1bda21a8c..51de93743 100644 --- a/package.json +++ b/package.json @@ -5579,6 +5579,11 @@ "contents": "%viewsWelcome.debug.contents%", "when": "debugStartLanguage == csharp && !dotnet.debug.serviceBrokerAvailable" } - ] + ], + "configurationDefaults": { + "[xaml]": { + "editor.wordBasedSuggestions": "off" + } + } } } From 78a3cfc22b1341a2c5f53a58ad15731672cb8c49 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 5 Sep 2024 22:28:22 -0700 Subject: [PATCH 035/100] Added a devcontainer to make the contributing experience easier. --- .devcontainer/Dockerfile | 9 +++++ .devcontainer/devcontainer.json | 64 +++++++++++++++++++++++++++++++++ .devcontainer/devinit.json | 7 ++++ 3 files changed, 80 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/devinit.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..aa8e417ef --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,9 @@ +# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.192.0/containers/dotnet/.devcontainer/base.Dockerfile + +FROM mcr.microsoft.com/dotnet/sdk:8.0 + +# Set up machine requirements to build the repo +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends curl git gnupg \ + && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..bdc4643e4 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,64 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.140.1/containers/dotnetcore +{ + "name": "vscode-csharp", + "build": { + "dockerfile": "Dockerfile", + // Set the context to the workspace folder to allow us to copy files from it. + "context": ".." + }, + "customizations": { + "vscode": { + "settings": { + "files.associations": { + "*.csproj": "msbuild", + "*.fsproj": "msbuild", + "*.globalconfig": "ini", + "*.manifest": "xml", + "*.nuspec": "xml", + "*.pkgdef": "ini", + "*.projitems": "msbuild", + "*.props": "msbuild", + "*.resx": "xml", + "*.rsp": "Powershell", + "*.ruleset": "xml", + "*.settings": "xml", + "*.shproj": "msbuild", + "*.slnf": "json", + "*.targets": "msbuild", + "*.vbproj": "msbuild", + "*.vsixmanifest": "xml", + "*.vstemplate": "xml", + "*.xlf": "xml", + "*.yml": "azure-pipelines" + }, + // ms-dotnettools.csharp settings + "omnisharp.disableMSBuildDiagnosticWarning": true, + "omnisharp.enableEditorConfigSupport": true, + "omnisharp.enableImportCompletion": true, + "omnisharp.useModernNet": true, + "omnisharp.enableAsyncCompletion": true, + // ms-dotnettools.csdevkit settings + "dotnet.defaultSolution": "Roslyn.sln", + // ms-vscode.powershell settings + "powershell.promptToUpdatePowerShell": false, + "powershell.integratedConsole.showOnStartup": false, + "powershell.startAutomatically": false, + // ms-azure-devops.azure-pipelines settings + "azure-pipelines.customSchemaFile": ".vscode/dnceng-schema.json" + }, + "extensions": [ + "ms-dotnettools.csharp", + "ms-dotnettools.csdevkit", + "EditorConfig.EditorConfig", + "ms-vscode.powershell", + "tintoy.msbuild-project-tools", + "ms-azure-devops.azure-pipelines", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "orta.vscode-jest" + ] + } + }, + "postCreateCommand": "npm ci && npx gulp installDependencies" +} diff --git a/.devcontainer/devinit.json b/.devcontainer/devinit.json new file mode 100644 index 000000000..b88bf48be --- /dev/null +++ b/.devcontainer/devinit.json @@ -0,0 +1,7 @@ +{ + "run": [ + { + "tool": "require-dotnetcoresdk" + } + ] + } \ No newline at end of file From 0a6f948c960eb593919324db66f8c9f3ab4be961 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 6 Sep 2024 12:24:43 -0400 Subject: [PATCH 036/100] Bump xamlTools to 17.12.35305.252 This is from the VS build Friday, 9/06. Also updated CHANGELOG. --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c1c4b5e5..51f21e7ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest -* Bump xamltools to 17.12.35304.30 (PR: [#7507](https://github.com/dotnet/vscode-csharp/pull/7508)) +* Bump xamltools to 17.12.35305.252 (PR: [#7521](https://github.com/dotnet/vscode-csharp/pull/7521)) # 2.46.x * Update Roslyn to 4.12.0-3.24430.2 (PR: [#7496](https://github.com/dotnet/vscode-csharp/pull/7496)) diff --git a/package.json b/package.json index 1bda21a8c..c07eda83b 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.35304.30" + "xamlTools": "17.12.35305.252" }, "main": "./dist/extension", "l10n": "./l10n", From b4a3a7c5b7139e28db5fd149dbe2f118ceb17423 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 6 Sep 2024 12:59:37 -0400 Subject: [PATCH 037/100] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51f21e7ff..4ae4fa3c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ # Latest * Bump xamltools to 17.12.35305.252 (PR: [#7521](https://github.com/dotnet/vscode-csharp/pull/7521)) + * XAML editor enabled various lightbulbs related to x:DataType, BindingContext and Bindings. # 2.46.x * Update Roslyn to 4.12.0-3.24430.2 (PR: [#7496](https://github.com/dotnet/vscode-csharp/pull/7496)) From 9dd81554dbf1f6da3f6641ff70e8d2688973694d Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 6 Sep 2024 10:55:31 -0700 Subject: [PATCH 038/100] Move OmniSharp code under the omnisharp folder --- l10n/bundle.l10n.json | 24 +-- .../advisor.integration.test.ts | 2 +- .../completionProvider.integration.test.ts | 2 +- .../definitionProvider.test.ts | 2 +- .../implementationProvider.test.ts | 2 +- .../integrationHelpers.ts | 2 +- .../referenceProvider.test.ts | 2 +- .../sourceGeneratorDefinitionProvider.test.ts | 2 +- .../typeDefinitionProvider.test.ts | 2 +- .../informationMessageObserver.test.ts | 2 +- .../backgroundWorkStatusBarObserver.test.ts | 2 +- .../logging/dotnetChannelObserver.test.ts | 2 +- .../logging/dotnetLoggerObserver.test.ts | 2 +- .../logging/dotnetTestChannelObserver.test.ts | 2 +- .../logging/dotnetTestLoggerObserver.test.ts | 2 +- .../logging/errorMessageObserver.test.ts | 2 +- .../logging/omnisharpChannelObserver.test.ts | 2 +- .../omnisharpDebugModeLoggerObserver.test.ts | 2 +- .../logging/omnisharpLoggerObserver.test.ts | 2 +- .../omnisharpStatusBarObserver.test.ts | 5 +- .../logging/projectStatusBarObserver.test.ts | 2 +- .../logging/razorLoggerObserver.test.ts | 2 +- .../logging/telemetryObserver.test.ts | 2 +- .../logging/warningMessageObserver.test.ts | 2 +- .../omnisharpUnitTests/processPicker.test.ts | 2 +- src/coreclrDebug/activate.ts | 2 +- src/csharpExtensionExports.ts | 4 +- src/main.ts | 114 +------------- src/omnisharp/engines/IEngine.ts | 4 +- src/omnisharp/engines/lspEngine.ts | 4 +- src/omnisharp/engines/stdioEngine.ts | 48 +++--- .../features/abstractProvider.ts | 6 +- .../features/changeForwarding.ts | 10 +- .../features/codeActionProvider.ts | 14 +- .../features/codeLensProvider.ts | 12 +- src/{ => omnisharp}/features/commands.ts | 28 ++-- .../features/completionProvider.ts | 10 +- .../definitionMetadataDocumentProvider.ts | 4 +- .../features/definitionProvider.ts | 10 +- .../features/diagnosticsProvider.ts | 20 +-- .../features/documentHighlightProvider.ts | 6 +- .../features/documentSymbolProvider.ts | 6 +- src/{ => omnisharp}/features/documentation.ts | 2 +- src/{ => omnisharp}/features/dotnetTest.ts | 22 +-- .../features/fileOpenCloseProvider.ts | 8 +- src/{ => omnisharp}/features/fixAll.ts | 0 .../features/fixAllProvider.ts | 14 +- .../features/formattingEditProvider.ts | 4 +- src/{ => omnisharp}/features/hoverProvider.ts | 6 +- .../features/implementationProvider.ts | 6 +- .../features/inlayHintProvider.ts | 12 +- .../features/launchConfiguration.ts | 0 src/{ => omnisharp}/features/processPicker.ts | 4 +- .../features/referenceProvider.ts | 10 +- .../features/renameProvider.ts | 6 +- .../features/semanticTokensProvider.ts | 12 +- .../features/signatureHelpProvider.ts | 6 +- .../sourceGeneratedDocumentProvider.ts | 8 +- .../features/structureProvider.ts | 4 +- .../features/virtualDocumentTracker.ts | 14 +- .../features/workspaceSymbolProvider.ts | 12 +- .../backgroundWorkStatusBarObserver.ts | 6 +- .../observers/baseStatusBarItemObserver.ts | 4 +- .../observers/dotnetChannelObserver.ts | 6 +- .../observers/dotnetLoggerObserver.ts | 6 +- .../observers/dotnetTestChannelObserver.ts | 6 +- .../observers/dotnetTestLoggerObserver.ts | 8 +- .../observers/errorMessageObserver.ts | 6 +- .../observers/informationMessageObserver.ts | 10 +- .../observers/omnisharpChannelObserver.ts | 10 +- .../omnisharpDebugModeLoggerObserver.ts | 6 +- .../observers/omnisharpLoggerObserver.ts | 10 +- .../observers/omnisharpStatusBarObserver.ts | 4 +- .../observers/projectStatusBarObserver.ts | 4 +- .../observers/razorLoggerObserver.ts | 6 +- .../observers/telemetryObserver.ts | 16 +- .../observers/utils/messageItemWithCommand.ts | 2 +- .../observers/utils/showErrorMessage.ts | 2 +- .../observers/utils/showWarningMessage.ts | 2 +- .../observers/warningMessageObserver.ts | 6 +- ...xtension.ts => omnisharpLanguageServer.ts} | 147 ++++++++++++++++-- src/omnisharp/server.ts | 8 +- .../blazorDebugConfigurationProvider.ts | 2 +- src/shared/configurationProvider.ts | 2 +- .../observers/baseChannelObserver.ts | 4 +- .../observers/baseLoggerObserver.ts | 6 +- src/shared/observers/csharpChannelObserver.ts | 2 +- src/shared/observers/csharpLoggerObserver.ts | 2 +- .../observers/utils/showInformationMessage.ts | 2 +- 89 files changed, 421 insertions(+), 401 deletions(-) rename src/{ => omnisharp}/features/abstractProvider.ts (83%) rename src/{ => omnisharp}/features/changeForwarding.ts (91%) rename src/{ => omnisharp}/features/codeActionProvider.ts (90%) rename src/{ => omnisharp}/features/codeLensProvider.ts (96%) rename src/{ => omnisharp}/features/commands.ts (90%) rename src/{ => omnisharp}/features/completionProvider.ts (96%) rename src/{ => omnisharp}/features/definitionMetadataDocumentProvider.ts (93%) rename src/{ => omnisharp}/features/definitionProvider.ts (94%) rename src/{ => omnisharp}/features/diagnosticsProvider.ts (96%) rename src/{ => omnisharp}/features/documentHighlightProvider.ts (89%) rename src/{ => omnisharp}/features/documentSymbolProvider.ts (96%) rename src/{ => omnisharp}/features/documentation.ts (96%) rename src/{ => omnisharp}/features/dotnetTest.ts (97%) rename src/{ => omnisharp}/features/fileOpenCloseProvider.ts (94%) rename src/{ => omnisharp}/features/fixAll.ts (100%) rename src/{ => omnisharp}/features/fixAllProvider.ts (90%) rename src/{ => omnisharp}/features/formattingEditProvider.ts (96%) rename src/{ => omnisharp}/features/hoverProvider.ts (88%) rename src/{ => omnisharp}/features/implementationProvider.ts (87%) rename src/{ => omnisharp}/features/inlayHintProvider.ts (92%) rename src/{ => omnisharp}/features/launchConfiguration.ts (100%) rename src/{ => omnisharp}/features/processPicker.ts (99%) rename src/{ => omnisharp}/features/referenceProvider.ts (90%) rename src/{ => omnisharp}/features/renameProvider.ts (92%) rename src/{ => omnisharp}/features/semanticTokensProvider.ts (98%) rename src/{ => omnisharp}/features/signatureHelpProvider.ts (93%) rename src/{ => omnisharp}/features/sourceGeneratedDocumentProvider.ts (96%) rename src/{ => omnisharp}/features/structureProvider.ts (94%) rename src/{ => omnisharp}/features/virtualDocumentTracker.ts (92%) rename src/{ => omnisharp}/features/workspaceSymbolProvider.ts (88%) rename src/{ => omnisharp}/observers/backgroundWorkStatusBarObserver.ts (89%) rename src/{ => omnisharp}/observers/baseStatusBarItemObserver.ts (91%) rename src/{ => omnisharp}/observers/dotnetChannelObserver.ts (79%) rename src/{ => omnisharp}/observers/dotnetLoggerObserver.ts (88%) rename src/{ => omnisharp}/observers/dotnetTestChannelObserver.ts (84%) rename src/{ => omnisharp}/observers/dotnetTestLoggerObserver.ts (97%) rename src/{ => omnisharp}/observers/errorMessageObserver.ts (94%) rename src/{ => omnisharp}/observers/informationMessageObserver.ts (81%) rename src/{ => omnisharp}/observers/omnisharpChannelObserver.ts (80%) rename src/{ => omnisharp}/observers/omnisharpDebugModeLoggerObserver.ts (97%) rename src/{ => omnisharp}/observers/omnisharpLoggerObserver.ts (96%) rename src/{ => omnisharp}/observers/omnisharpStatusBarObserver.ts (97%) rename src/{ => omnisharp}/observers/projectStatusBarObserver.ts (92%) rename src/{ => omnisharp}/observers/razorLoggerObserver.ts (91%) rename src/{ => omnisharp}/observers/telemetryObserver.ts (91%) rename src/{ => omnisharp}/observers/utils/messageItemWithCommand.ts (89%) rename src/{ => omnisharp}/observers/utils/showErrorMessage.ts (92%) rename src/{ => omnisharp}/observers/utils/showWarningMessage.ts (94%) rename src/{ => omnisharp}/observers/warningMessageObserver.ts (93%) rename src/omnisharp/{extension.ts => omnisharpLanguageServer.ts} (56%) rename src/{ => shared}/observers/baseChannelObserver.ts (86%) rename src/{ => shared}/observers/baseLoggerObserver.ts (83%) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 23fab989f..cb6615ec5 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -143,6 +143,18 @@ "Package {0} download from {1} failed integrity check. Some features may not work as expected. Please restart Visual Studio Code to retrigger the download": "Package {0} download from {1} failed integrity check. Some features may not work as expected. Please restart Visual Studio Code to retrigger the download", "Failed to run test: {0}": "Failed to run test: {0}", "Failed to start debugger: {0}": "Failed to start debugger: {0}", + "pipeArgs must be a string or a string array type": "pipeArgs must be a string or a string array type", + "Name not defined in current configuration.": "Name not defined in current configuration.", + "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.": "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.", + "Select the process to attach to": "Select the process to attach to", + "Pipe transport failed to get OS and processes.": "Pipe transport failed to get OS and processes.", + "Operating system \"{0}\" not supported.": "Operating system \"{0}\" not supported.", + "Transport attach could not obtain processes list.": "Transport attach could not obtain processes list.", + "Error Message: ": "Error Message: ", + "See {0} output": "See {0} output", + "Text editor must be focused to fix all issues": "Text editor must be focused to fix all issues", + "Fix all issues": "Fix all issues", + "Select fix all action": "Select fix all action", "Test run already in progress": "Test run already in progress", "Server stopped": "Server stopped", "Workspace projects": "Workspace projects", @@ -167,18 +179,6 @@ "Active File Context": "Active File Context", "Pick a fix all scope": "Pick a fix all scope", "Fix All Code Action": "Fix All Code Action", - "pipeArgs must be a string or a string array type": "pipeArgs must be a string or a string array type", - "Name not defined in current configuration.": "Name not defined in current configuration.", - "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.": "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.", - "Select the process to attach to": "Select the process to attach to", - "Pipe transport failed to get OS and processes.": "Pipe transport failed to get OS and processes.", - "Operating system \"{0}\" not supported.": "Operating system \"{0}\" not supported.", - "Transport attach could not obtain processes list.": "Transport attach could not obtain processes list.", - "Error Message: ": "Error Message: ", - "See {0} output": "See {0} output", - "Text editor must be focused to fix all issues": "Text editor must be focused to fix all issues", - "Fix all issues": "Fix all issues", - "Select fix all action": "Select fix all action", "Failed to set extension directory": "Failed to set extension directory", "Failed to set debugadpter directory": "Failed to set debugadpter directory", "Failed to set install complete file path": "Failed to set install complete file path", diff --git a/omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts b/omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts index ee5d8ef48..b82f5ff0a 100644 --- a/omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts @@ -9,7 +9,7 @@ import * as vscode from 'vscode'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; -import { Advisor } from '../../src/features/diagnosticsProvider'; +import { Advisor } from '../../src/omnisharp/features/diagnosticsProvider'; function setLimit(to: number | null) { const csharpConfig = vscode.workspace.getConfiguration('csharp'); diff --git a/omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts b/omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts index 9ed375b51..db58978c9 100644 --- a/omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, test, beforeAll, afterAll } from '@jest/globals'; -import OmniSharpCompletionProvider from '../../src/features/completionProvider'; +import OmniSharpCompletionProvider from '../../src/omnisharp/features/completionProvider'; import * as vscode from 'vscode'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import * as path from 'path'; diff --git a/omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts b/omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts index a114f58d7..bb813c9ce 100644 --- a/omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpDefinitionProvider from '../../src/features/definitionProvider'; +import OmniSharpDefinitionProvider from '../../src/omnisharp/features/definitionProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator, restartOmniSharpServer } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts b/omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts index b37b63748..0c2e3cb87 100644 --- a/omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpImplementationProvider from '../../src/features/implementationProvider'; +import OmniSharpImplementationProvider from '../../src/omnisharp/features/implementationProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts b/omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts index e5da6162b..01d350009 100644 --- a/omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts +++ b/omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts @@ -5,7 +5,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import { Advisor } from '../../src/features/diagnosticsProvider'; +import { Advisor } from '../../src/omnisharp/features/diagnosticsProvider'; import { EventStream } from '../../src/eventStream'; import { EventType } from '../../src/omnisharp/eventType'; import { OmnisharpExtensionExports } from '../../src/csharpExtensionExports'; diff --git a/omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts b/omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts index b1c0753be..29e971b73 100644 --- a/omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpReferenceProvider from '../../src/features/referenceProvider'; +import OmniSharpReferenceProvider from '../../src/omnisharp/features/referenceProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts b/omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts index 449d0b197..3d32def22 100644 --- a/omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts @@ -6,7 +6,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; import * as path from 'path'; -import OmniSharpDefinitionProvider from '../../src/features/definitionProvider'; +import OmniSharpDefinitionProvider from '../../src/omnisharp/features/definitionProvider'; import { activateCSharpExtension, describeIfGenerator, restartOmniSharpServer } from './integrationHelpers'; import { assertWithPoll, sleep } from './poll'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; diff --git a/omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts b/omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts index 5e4572643..3fa5aabda 100644 --- a/omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts +++ b/omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpDefinitionProvider from '../../src/features/definitionProvider'; +import OmniSharpDefinitionProvider from '../../src/omnisharp/features/definitionProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator, restartOmniSharpServer } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts b/omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts index 52ad86613..fb36928a1 100644 --- a/omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach, afterEach } from '@jest/globals'; -import { InformationMessageObserver } from '../../src/observers/informationMessageObserver'; +import { InformationMessageObserver } from '../../src/omnisharp/observers/informationMessageObserver'; import { getUnresolvedDependenices, getWorkspaceConfiguration } from '../../test/unitTests/fakes'; import { Subject, from as observableFrom } from 'rxjs'; import { timeout } from 'rxjs/operators'; diff --git a/omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts index a30c7c0ab..47247976f 100644 --- a/omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts @@ -6,7 +6,7 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { StatusBarItem } from '../../../src/vscodeAdapter'; import { OmnisharpBackgroundDiagnosticStatus } from '../../../src/omnisharp/loggingEvents'; -import { BackgroundWorkStatusBarObserver } from '../../../src/observers/backgroundWorkStatusBarObserver'; +import { BackgroundWorkStatusBarObserver } from '../../../src/omnisharp/observers/backgroundWorkStatusBarObserver'; import { BackgroundDiagnosticStatus } from '../../../src/omnisharp/protocol'; describe('BackgroundWorkStatusBarObserver', () => { diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts index 88b7b569d..95e2f2c9e 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { DotNetChannelObserver } from '../../../src/observers/dotnetChannelObserver'; +import { DotNetChannelObserver } from '../../../src/omnisharp/observers/dotnetChannelObserver'; import { getNullChannel } from '../../../test/unitTests/fakes'; import { CommandDotNetRestoreStart } from '../../../src/omnisharp/loggingEvents'; diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts index 529c9d1f1..36c771e20 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts @@ -5,7 +5,7 @@ import { describe, test, expect } from '@jest/globals'; import { getNullChannel } from '../../../test/unitTests/fakes'; -import { DotnetLoggerObserver } from '../../../src/observers/dotnetLoggerObserver'; +import { DotnetLoggerObserver } from '../../../src/omnisharp/observers/dotnetLoggerObserver'; import { CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts index ed0a47348..51dd8dd6b 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts @@ -13,7 +13,7 @@ import { DotNetTestsInClassRunStart, DotNetTestDebugStart, } from '../../../src/omnisharp/loggingEvents'; -import DotnetTestChannelObserver from '../../../src/observers/dotnetTestChannelObserver'; +import DotnetTestChannelObserver from '../../../src/omnisharp/observers/dotnetTestChannelObserver'; describe('DotnetTestChannelObserver', () => { let hasShown: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts index a5b74ae40..7b2d6bd84 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts @@ -20,7 +20,7 @@ import { DotNetTestRunInContextStart, DotNetTestDebugInContextStart, } from '../../../src/omnisharp/loggingEvents'; -import DotNetTestLoggerObserver from '../../../src/observers/dotnetTestLoggerObserver'; +import DotNetTestLoggerObserver from '../../../src/omnisharp/observers/dotnetTestLoggerObserver'; import * as protocol from '../../../src/omnisharp/protocol'; describe(`${DotNetTestLoggerObserver.name}`, () => { diff --git a/omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts index be5566621..1e0e948ba 100644 --- a/omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts @@ -6,7 +6,7 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { vscode } from '../../../src/vscodeAdapter'; -import { ErrorMessageObserver } from '../../../src/observers/errorMessageObserver'; +import { ErrorMessageObserver } from '../../../src/omnisharp/observers/errorMessageObserver'; import { ZipError, DotNetTestRunFailure, diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts index 3a88349ca..dbb9af29f 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach } from '@jest/globals'; import { getNullChannel, getWorkspaceConfiguration } from '../../../test/unitTests/fakes'; -import { OmnisharpChannelObserver } from '../../../src/observers/omnisharpChannelObserver'; +import { OmnisharpChannelObserver } from '../../../src/omnisharp/observers/omnisharpChannelObserver'; import { OmnisharpFailure, ShowOmniSharpChannel, diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts index c5e3fee7d..9973901d5 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts @@ -15,7 +15,7 @@ import { OmnisharpServerProcessRequestComplete, OmnisharpServerRequestCancelled, } from '../../../src/omnisharp/loggingEvents'; -import { OmnisharpDebugModeLoggerObserver } from '../../../src/observers/omnisharpDebugModeLoggerObserver'; +import { OmnisharpDebugModeLoggerObserver } from '../../../src/omnisharp/observers/omnisharpDebugModeLoggerObserver'; describe('OmnisharpDebugModeLoggerObserver', () => { let logOutput = ''; diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts index 2945d9d84..fa4b28137 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { getNullChannel } from '../../../test/unitTests/fakes'; import { describe, test, expect, beforeEach } from '@jest/globals'; -import { OmnisharpLoggerObserver } from '../../../src/observers/omnisharpLoggerObserver'; +import { OmnisharpLoggerObserver } from '../../../src/omnisharp/observers/omnisharpLoggerObserver'; import { OmnisharpServerMsBuildProjectDiagnostics, EventWithMessage, diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts index 5db4b97cf..f5ef806bc 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts @@ -18,7 +18,10 @@ import { BaseEvent, InstallationSuccess, } from '../../../src/omnisharp/loggingEvents'; -import { OmnisharpStatusBarObserver, StatusBarColors } from '../../../src/observers/omnisharpStatusBarObserver'; +import { + OmnisharpStatusBarObserver, + StatusBarColors, +} from '../../../src/omnisharp/observers/omnisharpStatusBarObserver'; describe('OmnisharpStatusBarObserver', () => { let showCalled: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts index b06f6070b..79a8ddeb5 100644 --- a/omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts @@ -6,7 +6,7 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { getWorkspaceInformationUpdated, getMSBuildWorkspaceInformation } from '../../../test/unitTests/fakes'; import { StatusBarItem } from '../../../src/vscodeAdapter'; -import { ProjectStatusBarObserver } from '../../../src/observers/projectStatusBarObserver'; +import { ProjectStatusBarObserver } from '../../../src/omnisharp/observers/projectStatusBarObserver'; import { OmnisharpOnMultipleLaunchTargets, OmnisharpServerOnStop } from '../../../src/omnisharp/loggingEvents'; describe('ProjectStatusBarObserver', () => { diff --git a/omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts index 842608194..a5b15aac6 100644 --- a/omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; import { getNullChannel } from '../../../test/unitTests/fakes'; -import { RazorLoggerObserver } from '../../../src/observers/razorLoggerObserver'; +import { RazorLoggerObserver } from '../../../src/omnisharp/observers/razorLoggerObserver'; import { RazorPluginPathSpecified, RazorPluginPathDoesNotExist, diff --git a/omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts index f4880e56e..0aecfb5b5 100644 --- a/omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { beforeEach, test, describe, expect } from '@jest/globals'; -import { TelemetryObserver } from '../../../src/observers/telemetryObserver'; +import { TelemetryObserver } from '../../../src/omnisharp/observers/telemetryObserver'; import { PlatformInformation } from '../../../src/shared/platform'; import { PackageInstallation, diff --git a/omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts b/omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts index 73e867cc4..0188991c5 100644 --- a/omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts +++ b/omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { WarningMessageObserver } from '../../../src/observers/warningMessageObserver'; +import { WarningMessageObserver } from '../../../src/omnisharp/observers/warningMessageObserver'; import { getFakeVsCode, getMSBuildDiagnosticsMessage, diff --git a/omnisharptest/omnisharpUnitTests/processPicker.test.ts b/omnisharptest/omnisharpUnitTests/processPicker.test.ts index dfde38bac..5a18a1358 100644 --- a/omnisharptest/omnisharpUnitTests/processPicker.test.ts +++ b/omnisharptest/omnisharpUnitTests/processPicker.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { RemoteAttachPicker, Process, CimProcessParser } from '../../src/features/processPicker'; +import { RemoteAttachPicker, Process, CimProcessParser } from '../../src/omnisharp/features/processPicker'; describe('Remote Process Picker: Validate quoting arguments.', () => { test('Argument with no spaces', () => { diff --git a/src/coreclrDebug/activate.ts b/src/coreclrDebug/activate.ts index 3cb7fa5e2..b9a03a83f 100644 --- a/src/coreclrDebug/activate.ts +++ b/src/coreclrDebug/activate.ts @@ -16,7 +16,7 @@ import { import { EventStream } from '../eventStream'; import { getRuntimeDependencyPackageWithId } from '../tools/runtimeDependencyPackageUtils'; import { getDotnetInfo } from '../shared/utils/getDotnetInfo'; -import { RemoteAttachPicker } from '../features/processPicker'; +import { RemoteAttachPicker } from '../omnisharp/features/processPicker'; import CompositeDisposable from '../compositeDisposable'; import { BaseVsDbgConfigurationProvider } from '../shared/configurationProvider'; import { omnisharpOptions } from '../shared/options'; diff --git a/src/csharpExtensionExports.ts b/src/csharpExtensionExports.ts index a6a717a2f..99bc7e372 100644 --- a/src/csharpExtensionExports.ts +++ b/src/csharpExtensionExports.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { Advisor } from './features/diagnosticsProvider'; +import { Advisor } from './omnisharp/features/diagnosticsProvider'; import { EventStream } from './eventStream'; -import TestManager from './features/dotnetTest'; +import TestManager from './omnisharp/features/dotnetTest'; import { GlobalBrokeredServiceContainer } from '@microsoft/servicehub-framework'; import { RequestType } from 'vscode-languageclient/node'; import { LanguageServerEvents } from './lsptoolshost/languageServerEvents'; diff --git a/src/main.ts b/src/main.ts index 0fa150161..858e84240 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,41 +3,25 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as OmniSharp from './omnisharp/extension'; import * as coreclrdebug from './coreclrDebug/activate'; import * as util from './common'; import * as vscode from 'vscode'; import { ActivationFailure, ActiveTextEditorChanged } from './omnisharp/loggingEvents'; -import { WarningMessageObserver } from './observers/warningMessageObserver'; import { CsharpChannelObserver } from './shared/observers/csharpChannelObserver'; import { CsharpLoggerObserver } from './shared/observers/csharpLoggerObserver'; -import { DotNetChannelObserver } from './observers/dotnetChannelObserver'; -import { DotnetLoggerObserver } from './observers/dotnetLoggerObserver'; import { EventStream } from './eventStream'; -import { InformationMessageObserver } from './observers/informationMessageObserver'; -import { OmnisharpChannelObserver } from './observers/omnisharpChannelObserver'; -import { OmnisharpDebugModeLoggerObserver } from './observers/omnisharpDebugModeLoggerObserver'; -import { OmnisharpLoggerObserver } from './observers/omnisharpLoggerObserver'; -import { OmnisharpStatusBarObserver } from './observers/omnisharpStatusBarObserver'; import { PlatformInformation } from './shared/platform'; -import { StatusBarItemAdapter } from './statusBarItemAdapter'; -import { TelemetryObserver } from './observers/telemetryObserver'; +import { TelemetryObserver } from './omnisharp/observers/telemetryObserver'; import TelemetryReporter from '@vscode/extension-telemetry'; -import { ProjectStatusBarObserver } from './observers/projectStatusBarObserver'; import { vscodeNetworkSettingsProvider } from './networkSettings'; -import { ErrorMessageObserver } from './observers/errorMessageObserver'; -import DotNetTestChannelObserver from './observers/dotnetTestChannelObserver'; -import DotNetTestLoggerObserver from './observers/dotnetTestLoggerObserver'; import createOptionStream from './shared/observables/createOptionStream'; import { activateRazorExtension } from './razor/razor'; -import { RazorLoggerObserver } from './observers/razorLoggerObserver'; import { AbsolutePathPackage } from './packageManager/absolutePathPackage'; import { downloadAndInstallPackages } from './packageManager/downloadAndInstallPackages'; import IInstallDependencies from './packageManager/IInstallDependencies'; import { installRuntimeDependencies } from './installRuntimeDependencies'; import { isValidDownload } from './packageManager/isValidDownload'; -import { BackgroundWorkStatusBarObserver } from './observers/backgroundWorkStatusBarObserver'; import { getDotnetPackApi } from './dotnetPack'; import { RoslynLanguageServer, activateRoslynLanguageServer } from './lsptoolshost/roslynLanguageServer'; import { MigrateOptions } from './shared/migrateOptions'; @@ -48,7 +32,6 @@ import { GlobalBrokeredServiceContainer } from '@microsoft/servicehub-framework' import { CSharpExtensionExports, OmnisharpExtensionExports } from './csharpExtensionExports'; import { csharpDevkitExtensionId, getCSharpDevKit } from './utils/getCSharpDevKit'; import { BlazorDebugConfigurationProvider } from './razor/src/blazorDebug/blazorDebugConfigurationProvider'; -import { RazorOmnisharpDownloader } from './razor/razorOmnisharpDownloader'; import { RoslynLanguageServerExport } from './lsptoolshost/roslynLanguageServerExportChannel'; import { registerOmnisharpOptionChanges } from './omnisharp/omnisharpOptionChanges'; import { RoslynLanguageServerEvents } from './lsptoolshost/languageServerEvents'; @@ -58,6 +41,7 @@ import { commonOptions, languageServerOptions, omnisharpOptions, razorOptions } import { BuildResultDiagnostics } from './lsptoolshost/services/buildResultReporterService'; import { debugSessionTracker } from './coreclrDebug/provisionalDebugSessionTracker'; import { getComponentFolder } from './lsptoolshost/builtInComponents'; +import { activateOmniSharpLanguageServer, ActivationResult } from './omnisharp/omnisharpLanguageServer'; export async function activate( context: vscode.ExtensionContext @@ -120,7 +104,7 @@ export async function activate( requiredPackageIds ); - let omnisharpLangServicePromise: Promise | undefined = undefined; + let omnisharpLangServicePromise: Promise | undefined = undefined; let omnisharpRazorPromise: Promise | undefined = undefined; const roslynLanguageServerEvents = new RoslynLanguageServerEvents(); context.subscriptions.push(roslynLanguageServerEvents); @@ -168,99 +152,15 @@ export async function activate( roslynLanguageServerEvents ); } else { - // Set command enablement to use O# commands. - vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'OmniSharp'); - - const dotnetChannelObserver = new DotNetChannelObserver(dotnetChannel); - const dotnetLoggerObserver = new DotnetLoggerObserver(dotnetChannel); - eventStream.subscribe(dotnetChannelObserver.post); - eventStream.subscribe(dotnetLoggerObserver.post); - - const dotnetTestChannelObserver = new DotNetTestChannelObserver(dotnetTestChannel); - const dotnetTestLoggerObserver = new DotNetTestLoggerObserver(dotnetTestChannel); - eventStream.subscribe(dotnetTestChannelObserver.post); - eventStream.subscribe(dotnetTestLoggerObserver.post); - - const omnisharpChannel = vscode.window.createOutputChannel('OmniSharp Log'); - const omnisharpLogObserver = new OmnisharpLoggerObserver(omnisharpChannel, platformInfo); - const omnisharpChannelObserver = new OmnisharpChannelObserver(omnisharpChannel); - eventStream.subscribe(omnisharpLogObserver.post); - eventStream.subscribe(omnisharpChannelObserver.post); - - const warningMessageObserver = new WarningMessageObserver( - vscode, - () => omnisharpOptions.disableMSBuildDiagnosticWarning || false - ); - eventStream.subscribe(warningMessageObserver.post); - - const informationMessageObserver = new InformationMessageObserver(vscode); - eventStream.subscribe(informationMessageObserver.post); - - const errorMessageObserver = new ErrorMessageObserver(vscode); - eventStream.subscribe(errorMessageObserver.post); - - const omnisharpStatusBar = new StatusBarItemAdapter( - vscode.window.createStatusBarItem( - 'C#-Language-Service-Status', - vscode.StatusBarAlignment.Left, - Number.MIN_VALUE + 2 - ) - ); - omnisharpStatusBar.name = 'C# Language Service Status'; - const omnisharpStatusBarObserver = new OmnisharpStatusBarObserver(omnisharpStatusBar); - eventStream.subscribe(omnisharpStatusBarObserver.post); - - const projectStatusBar = new StatusBarItemAdapter( - vscode.window.createStatusBarItem( - 'C#-Project-Selector', - vscode.StatusBarAlignment.Left, - Number.MIN_VALUE + 1 - ) - ); - projectStatusBar.name = 'C# Project Selector'; - const projectStatusBarObserver = new ProjectStatusBarObserver(projectStatusBar); - eventStream.subscribe(projectStatusBarObserver.post); - - const backgroundWorkStatusBar = new StatusBarItemAdapter( - vscode.window.createStatusBarItem('C#-Code-Analysis', vscode.StatusBarAlignment.Left, Number.MIN_VALUE) - ); - backgroundWorkStatusBar.name = 'C# Code Analysis'; - const backgroundWorkStatusBarObserver = new BackgroundWorkStatusBarObserver(backgroundWorkStatusBar); - eventStream.subscribe(backgroundWorkStatusBarObserver.post); - - const debugMode = false; - if (debugMode) { - const omnisharpDebugModeLoggerObserver = new OmnisharpDebugModeLoggerObserver(omnisharpChannel); - eventStream.subscribe(omnisharpDebugModeLoggerObserver.post); - } - - const razorObserver = new RazorLoggerObserver(csharpChannel); - eventStream.subscribe(razorObserver.post); - - if (!razorOptions.razorDevMode) { - // Download Razor O# server - const razorOmnisharpDownloader = new RazorOmnisharpDownloader( - networkSettingsProvider, - eventStream, - context.extension.packageJSON, - platformInfo, - context.extension.extensionPath - ); - - await razorOmnisharpDownloader.DownloadAndInstallRazorOmnisharp( - context.extension.packageJSON.defaults.razorOmnisharp - ); - } - // activate language services - omnisharpLangServicePromise = OmniSharp.activate( + omnisharpLangServicePromise = activateOmniSharpLanguageServer( context, - context.extension.packageJSON, platformInfo, networkSettingsProvider, eventStream, - context.extension.extensionPath, - omnisharpChannel + csharpChannel, + dotnetTestChannel, + dotnetChannel ); context.subscriptions.push(registerOmnisharpOptionChanges(optionStream)); diff --git a/src/omnisharp/engines/IEngine.ts b/src/omnisharp/engines/IEngine.ts index 59b227686..48affd177 100644 --- a/src/omnisharp/engines/IEngine.ts +++ b/src/omnisharp/engines/IEngine.ts @@ -8,8 +8,8 @@ import { LaunchTarget } from '../../shared/launchTarget'; import Disposable from '../../disposable'; import { OmniSharpServer } from '../server'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; -import { Advisor } from '../../features/diagnosticsProvider'; -import TestManager from '../../features/dotnetTest'; +import { Advisor } from '../features/diagnosticsProvider'; +import TestManager from '../features/dotnetTest'; import { EventStream } from '../../eventStream'; export interface IEngine { diff --git a/src/omnisharp/engines/lspEngine.ts b/src/omnisharp/engines/lspEngine.ts index de0a3176d..383d4f21c 100644 --- a/src/omnisharp/engines/lspEngine.ts +++ b/src/omnisharp/engines/lspEngine.ts @@ -38,8 +38,8 @@ import { DiagnosticFeature } from 'vscode-languageclient/lib/common/diagnostic'; import { NotebookDocumentSyncFeature } from 'vscode-languageclient/lib/common/notebook'; import { TypeHierarchyFeature } from 'vscode-languageclient/lib/common/typeHierarchy'; import { CallHierarchyFeature } from 'vscode-languageclient/lib/common/callHierarchy'; -import { Advisor } from '../../features/diagnosticsProvider'; -import dotnetTest from '../../features/dotnetTest'; +import { Advisor } from '../features/diagnosticsProvider'; +import dotnetTest from '../features/dotnetTest'; export class LspEngine implements IEngine { client: LanguageClient | undefined; diff --git a/src/omnisharp/engines/stdioEngine.ts b/src/omnisharp/engines/stdioEngine.ts index b6d5889ae..9eaf0332b 100644 --- a/src/omnisharp/engines/stdioEngine.ts +++ b/src/omnisharp/engines/stdioEngine.ts @@ -23,32 +23,32 @@ import { IHostExecutableResolver } from '../../shared/constants/IHostExecutableR import { removeBOMFromBuffer, removeBOMFromString } from '../../utils/removeBom'; import { IEngine } from './IEngine'; import { Events, OmniSharpServer } from '../server'; -import DefinitionMetadataDocumentProvider from '../../features/definitionMetadataDocumentProvider'; -import SourceGeneratedDocumentProvider from '../../features/sourceGeneratedDocumentProvider'; +import DefinitionMetadataDocumentProvider from '../features/definitionMetadataDocumentProvider'; +import SourceGeneratedDocumentProvider from '../features/sourceGeneratedDocumentProvider'; import * as vscode from 'vscode'; -import OmniSharpCodeLensProvider from '../../features/codeLensProvider'; -import OmniSharpDocumentHighlightProvider from '../../features/documentHighlightProvider'; -import OmniSharpDocumentSymbolProvider from '../../features/documentSymbolProvider'; -import OmniSharpHoverProvider from '../../features/hoverProvider'; -import OmniSharpRenameProvider from '../../features/renameProvider'; -import OmniSharpFormatProvider from '../../features/formattingEditProvider'; -import OmniSharpWorkspaceSymbolProvider from '../../features/workspaceSymbolProvider'; -import OmniSharpSignatureHelpProvider from '../../features/signatureHelpProvider'; -import { OmniSharpFixAllProvider } from '../../features/fixAllProvider'; -import OmniSharpCompletionProvider, { CompletionAfterInsertCommand } from '../../features/completionProvider'; -import OmniSharpReferenceProvider from '../../features/referenceProvider'; -import OmniSharpImplementationProvider from '../../features/implementationProvider'; -import OmniSharpSemanticTokensProvider from '../../features/semanticTokensProvider'; -import OmniSharpInlayHintProvider from '../../features/inlayHintProvider'; -import fileOpenClose from '../../features/fileOpenCloseProvider'; -import trackVirtualDocuments from '../../features/virtualDocumentTracker'; -import OmniSharpCodeActionProvider from '../../features/codeActionProvider'; -import forwardChanges from '../../features/changeForwarding'; -import OmniSharpDefinitionProvider from '../../features/definitionProvider'; -import reportDiagnostics, { Advisor } from '../../features/diagnosticsProvider'; +import OmniSharpCodeLensProvider from '../features/codeLensProvider'; +import OmniSharpDocumentHighlightProvider from '../features/documentHighlightProvider'; +import OmniSharpDocumentSymbolProvider from '../features/documentSymbolProvider'; +import OmniSharpHoverProvider from '../features/hoverProvider'; +import OmniSharpRenameProvider from '../features/renameProvider'; +import OmniSharpFormatProvider from '../features/formattingEditProvider'; +import OmniSharpWorkspaceSymbolProvider from '../features/workspaceSymbolProvider'; +import OmniSharpSignatureHelpProvider from '../features/signatureHelpProvider'; +import { OmniSharpFixAllProvider } from '../features/fixAllProvider'; +import OmniSharpCompletionProvider, { CompletionAfterInsertCommand } from '../features/completionProvider'; +import OmniSharpReferenceProvider from '../features/referenceProvider'; +import OmniSharpImplementationProvider from '../features/implementationProvider'; +import OmniSharpSemanticTokensProvider from '../features/semanticTokensProvider'; +import OmniSharpInlayHintProvider from '../features/inlayHintProvider'; +import fileOpenClose from '../features/fileOpenCloseProvider'; +import trackVirtualDocuments from '../features/virtualDocumentTracker'; +import OmniSharpCodeActionProvider from '../features/codeActionProvider'; +import forwardChanges from '../features/changeForwarding'; +import OmniSharpDefinitionProvider from '../features/definitionProvider'; +import reportDiagnostics, { Advisor } from '../features/diagnosticsProvider'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; -import TestManager from '../../features/dotnetTest'; -import { OmniSharpStructureProvider } from '../../features/structureProvider'; +import TestManager from '../features/dotnetTest'; +import { OmniSharpStructureProvider } from '../features/structureProvider'; export class StdioEngine implements IEngine { private static _nextId = 1; diff --git a/src/features/abstractProvider.ts b/src/omnisharp/features/abstractProvider.ts similarity index 83% rename from src/features/abstractProvider.ts rename to src/omnisharp/features/abstractProvider.ts index 64ac36c39..02ae33c31 100644 --- a/src/features/abstractProvider.ts +++ b/src/omnisharp/features/abstractProvider.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OmniSharpServer } from '../omnisharp/server'; -import CompositeDisposable from '../compositeDisposable'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; +import { OmniSharpServer } from '../server'; +import CompositeDisposable from '../../compositeDisposable'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; export default abstract class AbstractProvider { protected _server: OmniSharpServer; diff --git a/src/features/changeForwarding.ts b/src/omnisharp/features/changeForwarding.ts similarity index 91% rename from src/features/changeForwarding.ts rename to src/omnisharp/features/changeForwarding.ts index 28b4a0a4c..b07394c43 100644 --- a/src/features/changeForwarding.ts +++ b/src/omnisharp/features/changeForwarding.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { Uri, workspace } from 'vscode'; -import { OmniSharpServer } from '../omnisharp/server'; -import * as serverUtils from '../omnisharp/utils'; -import { FileChangeType } from '../omnisharp/protocol'; -import { IDisposable } from '../disposable'; -import CompositeDisposable from '../compositeDisposable'; +import { OmniSharpServer } from '../server'; +import * as serverUtils from '../utils'; +import { FileChangeType } from '../protocol'; +import { IDisposable } from '../../disposable'; +import CompositeDisposable from '../../compositeDisposable'; function forwardDocumentChanges(server: OmniSharpServer): IDisposable { return workspace.onDidChangeTextDocument((event) => { diff --git a/src/features/codeActionProvider.ts b/src/omnisharp/features/codeActionProvider.ts similarity index 90% rename from src/features/codeActionProvider.ts rename to src/omnisharp/features/codeActionProvider.ts index 1ba942444..736457a93 100644 --- a/src/features/codeActionProvider.ts +++ b/src/omnisharp/features/codeActionProvider.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { OmniSharpServer } from '../omnisharp/server'; +import { OmniSharpServer } from '../server'; import AbstractProvider from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import CompositeDisposable from '../compositeDisposable'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import { buildEditForResponse } from '../omnisharp/fileOperationsResponseEditBuilder'; -import { omnisharpOptions } from '../shared/options'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import CompositeDisposable from '../../compositeDisposable'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import { buildEditForResponse } from '../fileOperationsResponseEditBuilder'; +import { omnisharpOptions } from '../../shared/options'; export default class OmniSharpCodeActionProvider extends AbstractProvider diff --git a/src/features/codeLensProvider.ts b/src/omnisharp/features/codeLensProvider.ts similarity index 96% rename from src/features/codeLensProvider.ts rename to src/omnisharp/features/codeLensProvider.ts index 120faad6f..ea00eac36 100644 --- a/src/features/codeLensProvider.ts +++ b/src/omnisharp/features/codeLensProvider.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; import * as vscode from 'vscode'; -import { toLocation } from '../omnisharp/typeConversion'; +import { toLocation } from '../typeConversion'; import AbstractProvider from './abstractProvider'; -import { OmniSharpServer } from '../omnisharp/server'; -import { omnisharpOptions } from '../shared/options'; +import { OmniSharpServer } from '../server'; +import { omnisharpOptions } from '../../shared/options'; import TestManager from './dotnetTest'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import Structure = protocol.V2.Structure; import SymbolKinds = protocol.V2.SymbolKinds; import SymbolPropertyNames = protocol.V2.SymbolPropertyNames; import SymbolRangeNames = protocol.V2.SymbolRangeNames; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; abstract class OmniSharpCodeLens extends vscode.CodeLens { constructor(range: protocol.V2.Range, public fileName: string) { diff --git a/src/features/commands.ts b/src/omnisharp/features/commands.ts similarity index 90% rename from src/features/commands.ts rename to src/omnisharp/features/commands.ts index 458858946..1d5525a20 100644 --- a/src/features/commands.ts +++ b/src/omnisharp/features/commands.ts @@ -3,30 +3,30 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OmniSharpServer } from '../omnisharp/server'; -import * as serverUtils from '../omnisharp/utils'; -import { findLaunchTargets } from '../omnisharp/launcher'; -import { LaunchTarget } from '../shared/launchTarget'; +import { OmniSharpServer } from '../server'; +import * as serverUtils from '../utils'; +import { findLaunchTargets } from '../launcher'; +import { LaunchTarget } from '../../shared/launchTarget'; import * as cp from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; -import * as protocol from '../omnisharp/protocol'; +import * as protocol from '../protocol'; import * as vscode from 'vscode'; -import { generateAssets } from '../shared/assets'; +import { generateAssets } from '../../shared/assets'; import { ShowOmniSharpChannel, CommandDotNetRestoreStart, CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, CommandDotNetRestoreFailed, -} from '../omnisharp/loggingEvents'; -import { EventStream } from '../eventStream'; -import { PlatformInformation } from '../shared/platform'; -import CompositeDisposable from '../compositeDisposable'; -import reportIssue from '../shared/reportIssue'; -import { IHostExecutableResolver } from '../shared/constants/IHostExecutableResolver'; -import { getDotnetInfo } from '../shared/utils/getDotnetInfo'; -import { IWorkspaceDebugInformationProvider } from '../shared/IWorkspaceDebugInformationProvider'; +} from '../loggingEvents'; +import { EventStream } from '../../eventStream'; +import { PlatformInformation } from '../../shared/platform'; +import CompositeDisposable from '../../compositeDisposable'; +import reportIssue from '../../shared/reportIssue'; +import { IHostExecutableResolver } from '../../shared/constants/IHostExecutableResolver'; +import { getDotnetInfo } from '../../shared/utils/getDotnetInfo'; +import { IWorkspaceDebugInformationProvider } from '../../shared/IWorkspaceDebugInformationProvider'; export default function registerCommands( context: vscode.ExtensionContext, diff --git a/src/features/completionProvider.ts b/src/omnisharp/features/completionProvider.ts similarity index 96% rename from src/features/completionProvider.ts rename to src/omnisharp/features/completionProvider.ts index c3e09a236..251f340e3 100644 --- a/src/features/completionProvider.ts +++ b/src/omnisharp/features/completionProvider.ts @@ -21,16 +21,16 @@ import { CompletionItemLabel, } from 'vscode'; import AbstractProvider from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; import { CancellationToken, CompletionTriggerKind as LspCompletionTriggerKind, InsertTextFormat, } from 'vscode-languageserver-protocol'; -import { createRequest } from '../omnisharp/typeConversion'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import { OmniSharpServer } from '../omnisharp/server'; +import { createRequest } from '../typeConversion'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import { OmniSharpServer } from '../server'; import { isVirtualCSharpDocument } from './virtualDocumentTracker'; export const CompletionAfterInsertCommand = 'csharp.completion.afterInsert'; diff --git a/src/features/definitionMetadataDocumentProvider.ts b/src/omnisharp/features/definitionMetadataDocumentProvider.ts similarity index 93% rename from src/features/definitionMetadataDocumentProvider.ts rename to src/omnisharp/features/definitionMetadataDocumentProvider.ts index 5be753e8e..376255410 100644 --- a/src/features/definitionMetadataDocumentProvider.ts +++ b/src/omnisharp/features/definitionMetadataDocumentProvider.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { TextDocument, TextDocumentContentProvider, Uri, workspace } from 'vscode'; -import { MetadataResponse } from '../omnisharp/protocol'; -import { IDisposable } from '../disposable'; +import { MetadataResponse } from '../protocol'; +import { IDisposable } from '../../disposable'; export default class DefinitionMetadataDocumentProvider implements TextDocumentContentProvider, IDisposable { readonly scheme = 'omnisharp-metadata'; diff --git a/src/features/definitionProvider.ts b/src/omnisharp/features/definitionProvider.ts similarity index 94% rename from src/features/definitionProvider.ts rename to src/omnisharp/features/definitionProvider.ts index 709eba9a9..9a8534b3c 100644 --- a/src/features/definitionProvider.ts +++ b/src/omnisharp/features/definitionProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as serverUtils from '../omnisharp/utils'; +import * as serverUtils from '../utils'; import { CancellationToken, TypeDefinitionProvider, @@ -19,12 +19,12 @@ import { MetadataRequest, MetadataSource, V2, -} from '../omnisharp/protocol'; -import { createRequest, toRange3, toVscodeLocation } from '../omnisharp/typeConversion'; +} from '../protocol'; +import { createRequest, toRange3, toVscodeLocation } from '../typeConversion'; import AbstractSupport from './abstractProvider'; import DefinitionMetadataOrSourceGeneratedDocumentProvider from './definitionMetadataDocumentProvider'; -import { OmniSharpServer } from '../omnisharp/server'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; +import { OmniSharpServer } from '../server'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import SourceGeneratedDocumentProvider from './sourceGeneratedDocumentProvider'; export default class OmniSharpDefinitionProvider diff --git a/src/features/diagnosticsProvider.ts b/src/omnisharp/features/diagnosticsProvider.ts similarity index 96% rename from src/features/diagnosticsProvider.ts rename to src/omnisharp/features/diagnosticsProvider.ts index 2e56a505e..8decafb43 100644 --- a/src/features/diagnosticsProvider.ts +++ b/src/omnisharp/features/diagnosticsProvider.ts @@ -3,21 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { OmniSharpServer } from '../omnisharp/server'; +import { OmniSharpServer } from '../server'; import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { toRange } from '../omnisharp/typeConversion'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { toRange } from '../typeConversion'; import * as vscode from 'vscode'; -import CompositeDisposable from '../compositeDisposable'; -import { IDisposable } from '../disposable'; +import CompositeDisposable from '../../compositeDisposable'; +import { IDisposable } from '../../disposable'; import { isVirtualCSharpDocument } from './virtualDocumentTracker'; -import { TextDocument } from '../vscodeAdapter'; +import { TextDocument } from '../../vscodeAdapter'; import { Subject, Subscription } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; -import { BackgroundDiagnosticStatus } from '../omnisharp/protocol'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import { omnisharpOptions } from '../shared/options'; +import { BackgroundDiagnosticStatus } from '../protocol'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import { omnisharpOptions } from '../../shared/options'; export class Advisor { private _disposable: CompositeDisposable; diff --git a/src/features/documentHighlightProvider.ts b/src/omnisharp/features/documentHighlightProvider.ts similarity index 89% rename from src/features/documentHighlightProvider.ts rename to src/omnisharp/features/documentHighlightProvider.ts index 760f7e283..f93d1fcf8 100644 --- a/src/features/documentHighlightProvider.ts +++ b/src/omnisharp/features/documentHighlightProvider.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest, toRange } from '../omnisharp/typeConversion'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { createRequest, toRange } from '../typeConversion'; import { DocumentHighlightProvider, DocumentHighlight, diff --git a/src/features/documentSymbolProvider.ts b/src/omnisharp/features/documentSymbolProvider.ts similarity index 96% rename from src/features/documentSymbolProvider.ts rename to src/omnisharp/features/documentSymbolProvider.ts index 9840463cb..532f3d19d 100644 --- a/src/features/documentSymbolProvider.ts +++ b/src/omnisharp/features/documentSymbolProvider.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; import * as vscode from 'vscode'; import Structure = protocol.V2.Structure; import SymbolKinds = protocol.V2.SymbolKinds; import SymbolRangeNames = protocol.V2.SymbolRangeNames; -import { toRange3 } from '../omnisharp/typeConversion'; +import { toRange3 } from '../typeConversion'; export default class OmniSharpDocumentSymbolProvider extends AbstractSupport implements vscode.DocumentSymbolProvider { async provideDocumentSymbols( diff --git a/src/features/documentation.ts b/src/omnisharp/features/documentation.ts similarity index 96% rename from src/features/documentation.ts rename to src/omnisharp/features/documentation.ts index fa05521f6..929536794 100644 --- a/src/features/documentation.ts +++ b/src/omnisharp/features/documentation.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as protocol from '../omnisharp/protocol'; +import * as protocol from '../protocol'; const summaryStartTag = //i; const summaryEndTag = /<\/summary>/i; diff --git a/src/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts similarity index 97% rename from src/features/dotnetTest.ts rename to src/omnisharp/features/dotnetTest.ts index dfb61591f..7d4ee6146 100644 --- a/src/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -6,13 +6,13 @@ import * as net from 'net'; import * as os from 'os'; import * as path from 'path'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import * as utils from '../common'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import * as utils from '../../common'; import * as vscode from 'vscode'; import AbstractProvider from './abstractProvider'; -import * as DebuggerEventsProtocol from '../coreclrDebug/debuggerEventsProtocol'; -import { OmniSharpServer } from '../omnisharp/server'; +import * as DebuggerEventsProtocol from '../../coreclrDebug/debuggerEventsProtocol'; +import { OmniSharpServer } from '../server'; import { TestExecutionCountReport, ReportDotNetTestResults, @@ -28,13 +28,13 @@ import { DotNetTestDebugStartFailure, DotNetTestRunInContextStart, DotNetTestDebugInContextStart, -} from '../omnisharp/loggingEvents'; -import { EventStream } from '../eventStream'; +} from '../loggingEvents'; +import { EventStream } from '../../eventStream'; import LaunchConfiguration from './launchConfiguration'; -import Disposable from '../disposable'; -import CompositeDisposable from '../compositeDisposable'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import { commonOptions } from '../shared/options'; +import Disposable from '../../disposable'; +import CompositeDisposable from '../../compositeDisposable'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import { commonOptions } from '../../shared/options'; const TelemetryReportingDelay = 2 * 60 * 1000; // two minutes diff --git a/src/features/fileOpenCloseProvider.ts b/src/omnisharp/features/fileOpenCloseProvider.ts similarity index 94% rename from src/features/fileOpenCloseProvider.ts rename to src/omnisharp/features/fileOpenCloseProvider.ts index 01adc8735..460038702 100644 --- a/src/features/fileOpenCloseProvider.ts +++ b/src/omnisharp/features/fileOpenCloseProvider.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IDisposable } from '../disposable'; -import { OmniSharpServer } from '../omnisharp/server'; +import { IDisposable } from '../../disposable'; +import { OmniSharpServer } from '../server'; import * as vscode from 'vscode'; -import CompositeDisposable from '../compositeDisposable'; -import * as serverUtils from '../omnisharp/utils'; +import CompositeDisposable from '../../compositeDisposable'; +import * as serverUtils from '../utils'; import { isVirtualCSharpDocument } from './virtualDocumentTracker'; export default function fileOpenClose(server: OmniSharpServer): IDisposable { diff --git a/src/features/fixAll.ts b/src/omnisharp/features/fixAll.ts similarity index 100% rename from src/features/fixAll.ts rename to src/omnisharp/features/fixAll.ts diff --git a/src/features/fixAllProvider.ts b/src/omnisharp/features/fixAllProvider.ts similarity index 90% rename from src/features/fixAllProvider.ts rename to src/omnisharp/features/fixAllProvider.ts index dd64328bb..e067b22a3 100644 --- a/src/features/fixAllProvider.ts +++ b/src/omnisharp/features/fixAllProvider.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as serverUtils from '../omnisharp/utils'; -import * as protocol from '../omnisharp/protocol'; -import { OmniSharpServer } from '../omnisharp/server'; -import { FixAllScope, FixAllItem } from '../omnisharp/protocol'; -import CompositeDisposable from '../compositeDisposable'; +import * as serverUtils from '../utils'; +import * as protocol from '../protocol'; +import { OmniSharpServer } from '../server'; +import { FixAllScope, FixAllItem } from '../protocol'; +import CompositeDisposable from '../../compositeDisposable'; import AbstractProvider from './abstractProvider'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import { buildEditForResponse } from '../omnisharp/fileOperationsResponseEditBuilder'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import { buildEditForResponse } from '../fileOperationsResponseEditBuilder'; import { CancellationToken } from 'vscode-languageserver-protocol'; export class OmniSharpFixAllProvider extends AbstractProvider implements vscode.CodeActionProvider { diff --git a/src/features/formattingEditProvider.ts b/src/omnisharp/features/formattingEditProvider.ts similarity index 96% rename from src/features/formattingEditProvider.ts rename to src/omnisharp/features/formattingEditProvider.ts index d8b2171f4..fc1145c02 100644 --- a/src/features/formattingEditProvider.ts +++ b/src/omnisharp/features/formattingEditProvider.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; import { DocumentRangeFormattingEditProvider, FormattingOptions, diff --git a/src/features/hoverProvider.ts b/src/omnisharp/features/hoverProvider.ts similarity index 88% rename from src/features/hoverProvider.ts rename to src/omnisharp/features/hoverProvider.ts index 6dfc5d5ab..b812413dc 100644 --- a/src/features/hoverProvider.ts +++ b/src/omnisharp/features/hoverProvider.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest } from '../omnisharp/typeConversion'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { createRequest } from '../typeConversion'; import { HoverProvider, Hover, TextDocument, CancellationToken, Position, MarkdownString } from 'vscode'; export default class OmniSharpHoverProvider extends AbstractSupport implements HoverProvider { diff --git a/src/features/implementationProvider.ts b/src/omnisharp/features/implementationProvider.ts similarity index 87% rename from src/features/implementationProvider.ts rename to src/omnisharp/features/implementationProvider.ts index 18d6dc7e1..1b6db10bc 100644 --- a/src/features/implementationProvider.ts +++ b/src/omnisharp/features/implementationProvider.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import { FindImplementationsRequest } from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest, toLocation } from '../omnisharp/typeConversion'; +import { FindImplementationsRequest } from '../protocol'; +import * as serverUtils from '../utils'; +import { createRequest, toLocation } from '../typeConversion'; import { TextDocument, Position, CancellationToken, ImplementationProvider, Definition } from 'vscode'; export default class OmniSharpImplementationProvider extends AbstractSupport implements ImplementationProvider { diff --git a/src/features/inlayHintProvider.ts b/src/omnisharp/features/inlayHintProvider.ts similarity index 92% rename from src/features/inlayHintProvider.ts rename to src/omnisharp/features/inlayHintProvider.ts index 0b7c974b6..d5f32a3f0 100644 --- a/src/features/inlayHintProvider.ts +++ b/src/omnisharp/features/inlayHintProvider.ts @@ -2,19 +2,19 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as serverUtils from '../omnisharp/utils'; +import * as serverUtils from '../utils'; import * as vscode from 'vscode'; import AbstractProvider from './abstractProvider'; -import { OmniSharpServer } from '../omnisharp/server'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import CompositeDisposable from '../compositeDisposable'; +import { OmniSharpServer } from '../server'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import CompositeDisposable from '../../compositeDisposable'; import { InlayHint, InlayHintRequest, InlayHintResolve as InlayHintResolveRequest, LinePositionSpanTextChange, -} from '../omnisharp/protocol'; -import { fromVSCodeRange, toVSCodePosition, toVSCodeTextEdit } from '../omnisharp/typeConversion'; +} from '../protocol'; +import { fromVSCodeRange, toVSCodePosition, toVSCodeTextEdit } from '../typeConversion'; import { isVirtualCSharpDocument } from './virtualDocumentTracker'; export default class OmniSharpInlayHintProvider extends AbstractProvider implements vscode.InlayHintsProvider { diff --git a/src/features/launchConfiguration.ts b/src/omnisharp/features/launchConfiguration.ts similarity index 100% rename from src/features/launchConfiguration.ts rename to src/omnisharp/features/launchConfiguration.ts diff --git a/src/features/processPicker.ts b/src/omnisharp/features/processPicker.ts similarity index 99% rename from src/features/processPicker.ts rename to src/omnisharp/features/processPicker.ts index 693f04296..823ca3692 100644 --- a/src/features/processPicker.ts +++ b/src/omnisharp/features/processPicker.ts @@ -9,8 +9,8 @@ import * as os from 'os'; import * as path from 'path'; import * as vscode from 'vscode'; -import { PlatformInformation } from '../shared/platform'; -import { findPowerShell, getExtensionPath } from '../common'; +import { PlatformInformation } from '../../shared/platform'; +import { findPowerShell, getExtensionPath } from '../../common'; export interface AttachItem extends vscode.QuickPickItem { id: string; diff --git a/src/features/referenceProvider.ts b/src/omnisharp/features/referenceProvider.ts similarity index 90% rename from src/features/referenceProvider.ts rename to src/omnisharp/features/referenceProvider.ts index 46ed1ffd6..275ccbdc6 100644 --- a/src/features/referenceProvider.ts +++ b/src/omnisharp/features/referenceProvider.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest, toLocation, toLocationFromUri } from '../omnisharp/typeConversion'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { createRequest, toLocation, toLocationFromUri } from '../typeConversion'; import { ReferenceProvider, Location, TextDocument, CancellationToken, Position } from 'vscode'; -import { OmniSharpServer } from '../omnisharp/server'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; +import { OmniSharpServer } from '../server'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import SourceGeneratedDocumentProvider from './sourceGeneratedDocumentProvider'; export default class OmniSharpReferenceProvider extends AbstractSupport implements ReferenceProvider { diff --git a/src/features/renameProvider.ts b/src/omnisharp/features/renameProvider.ts similarity index 92% rename from src/features/renameProvider.ts rename to src/omnisharp/features/renameProvider.ts index e58d20f94..e160b06bb 100644 --- a/src/features/renameProvider.ts +++ b/src/omnisharp/features/renameProvider.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest } from '../omnisharp/typeConversion'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { createRequest } from '../typeConversion'; import { RenameProvider, WorkspaceEdit, TextDocument, Uri, CancellationToken, Position, Range } from 'vscode'; export default class OmniSharpRenameProvider extends AbstractSupport implements RenameProvider { diff --git a/src/features/semanticTokensProvider.ts b/src/omnisharp/features/semanticTokensProvider.ts similarity index 98% rename from src/features/semanticTokensProvider.ts rename to src/omnisharp/features/semanticTokensProvider.ts index 87cbc54da..077c86979 100644 --- a/src/features/semanticTokensProvider.ts +++ b/src/omnisharp/features/semanticTokensProvider.ts @@ -5,13 +5,13 @@ import * as vscode from 'vscode'; import { SemanticTokenTypes } from 'vscode-languageserver-protocol'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest, toRange2 } from '../omnisharp/typeConversion'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { createRequest, toRange2 } from '../typeConversion'; import AbstractProvider from './abstractProvider'; -import { OmniSharpServer } from '../omnisharp/server'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; -import { omnisharpOptions } from '../shared/options'; +import { OmniSharpServer } from '../server'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; +import { omnisharpOptions } from '../../shared/options'; // The default TokenTypes defined by VS Code https://github.com/microsoft/vscode/blob/master/src/vs/platform/theme/common/tokenClassificationRegistry.ts#L393 enum DefaultTokenType { diff --git a/src/features/signatureHelpProvider.ts b/src/omnisharp/features/signatureHelpProvider.ts similarity index 93% rename from src/features/signatureHelpProvider.ts rename to src/omnisharp/features/signatureHelpProvider.ts index d3bdb8096..1cea58fc4 100644 --- a/src/features/signatureHelpProvider.ts +++ b/src/omnisharp/features/signatureHelpProvider.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import * as serverUtils from '../omnisharp/utils'; -import { createRequest } from '../omnisharp/typeConversion'; +import * as serverUtils from '../utils'; +import { createRequest } from '../typeConversion'; import { SignatureHelpProvider, SignatureHelp, @@ -16,7 +16,7 @@ import { Position, } from 'vscode'; import { MarkdownString } from 'vscode'; -import { SignatureHelpParameter } from '../omnisharp/protocol'; +import { SignatureHelpParameter } from '../protocol'; export default class OmniSharpSignatureHelpProvider extends AbstractSupport implements SignatureHelpProvider { public async provideSignatureHelp( diff --git a/src/features/sourceGeneratedDocumentProvider.ts b/src/omnisharp/features/sourceGeneratedDocumentProvider.ts similarity index 96% rename from src/features/sourceGeneratedDocumentProvider.ts rename to src/omnisharp/features/sourceGeneratedDocumentProvider.ts index 68f149107..e84da6d38 100644 --- a/src/features/sourceGeneratedDocumentProvider.ts +++ b/src/omnisharp/features/sourceGeneratedDocumentProvider.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as serverUtils from '../omnisharp/utils'; +import * as serverUtils from '../utils'; import { CancellationToken, Event, @@ -15,9 +15,9 @@ import { window, workspace, } from 'vscode'; -import { IDisposable } from '../disposable'; -import { SourceGeneratedFileInfo, SourceGeneratedFileResponse, UpdateType } from '../omnisharp/protocol'; -import { OmniSharpServer } from '../omnisharp/server'; +import { IDisposable } from '../../disposable'; +import { SourceGeneratedFileInfo, SourceGeneratedFileResponse, UpdateType } from '../protocol'; +import { OmniSharpServer } from '../server'; export default class SourceGeneratedDocumentProvider implements TextDocumentContentProvider, IDisposable { readonly scheme = 'omnisharp-source-generated'; diff --git a/src/features/structureProvider.ts b/src/omnisharp/features/structureProvider.ts similarity index 94% rename from src/features/structureProvider.ts rename to src/omnisharp/features/structureProvider.ts index 648c48197..6a0c7a52f 100644 --- a/src/features/structureProvider.ts +++ b/src/omnisharp/features/structureProvider.ts @@ -12,8 +12,8 @@ import { FoldingRangeKind, } from 'vscode'; import AbstractSupport from './abstractProvider'; -import { blockStructure } from '../omnisharp/utils'; -import { V2 } from '../omnisharp/protocol'; +import { blockStructure } from '../utils'; +import { V2 } from '../protocol'; export class OmniSharpStructureProvider extends AbstractSupport implements FoldingRangeProvider { async provideFoldingRanges( diff --git a/src/features/virtualDocumentTracker.ts b/src/omnisharp/features/virtualDocumentTracker.ts similarity index 92% rename from src/features/virtualDocumentTracker.ts rename to src/omnisharp/features/virtualDocumentTracker.ts index b4fbea4a8..ef3ebf07d 100644 --- a/src/features/virtualDocumentTracker.ts +++ b/src/omnisharp/features/virtualDocumentTracker.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { workspace, TextDocument, Uri } from 'vscode'; -import { OmniSharpServer } from '../omnisharp/server'; -import * as serverUtils from '../omnisharp/utils'; -import { FileChangeType } from '../omnisharp/protocol'; -import { IDisposable } from '../disposable'; -import CompositeDisposable from '../compositeDisposable'; -import { EventStream } from '../eventStream'; -import { DocumentSynchronizationFailure } from '../omnisharp/loggingEvents'; +import { OmniSharpServer } from '../server'; +import * as serverUtils from '../utils'; +import { FileChangeType } from '../protocol'; +import { IDisposable } from '../../disposable'; +import CompositeDisposable from '../../compositeDisposable'; +import { EventStream } from '../../eventStream'; +import { DocumentSynchronizationFailure } from '../loggingEvents'; async function trackCurrentVirtualDocuments(server: OmniSharpServer, eventStream: EventStream) { for (let i = 0; i < workspace.textDocuments.length; i++) { diff --git a/src/features/workspaceSymbolProvider.ts b/src/omnisharp/features/workspaceSymbolProvider.ts similarity index 88% rename from src/features/workspaceSymbolProvider.ts rename to src/omnisharp/features/workspaceSymbolProvider.ts index 53f576ac0..cb0fdbfd8 100644 --- a/src/features/workspaceSymbolProvider.ts +++ b/src/omnisharp/features/workspaceSymbolProvider.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import AbstractSupport from './abstractProvider'; -import { OmniSharpServer } from '../omnisharp/server'; -import * as protocol from '../omnisharp/protocol'; -import * as serverUtils from '../omnisharp/utils'; -import { toRange } from '../omnisharp/typeConversion'; +import { OmniSharpServer } from '../server'; +import * as protocol from '../protocol'; +import * as serverUtils from '../utils'; +import { toRange } from '../typeConversion'; import { CancellationToken, Uri, WorkspaceSymbolProvider, SymbolInformation, SymbolKind, Location } from 'vscode'; -import { LanguageMiddlewareFeature } from '../omnisharp/languageMiddlewareFeature'; +import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import SourceGeneratedDocumentProvider from './sourceGeneratedDocumentProvider'; -import { omnisharpOptions } from '../shared/options'; +import { omnisharpOptions } from '../../shared/options'; export default class OmniSharpWorkspaceSymbolProvider extends AbstractSupport implements WorkspaceSymbolProvider { constructor( diff --git a/src/observers/backgroundWorkStatusBarObserver.ts b/src/omnisharp/observers/backgroundWorkStatusBarObserver.ts similarity index 89% rename from src/observers/backgroundWorkStatusBarObserver.ts rename to src/omnisharp/observers/backgroundWorkStatusBarObserver.ts index 4e2330ed1..f250efe6c 100644 --- a/src/observers/backgroundWorkStatusBarObserver.ts +++ b/src/omnisharp/observers/backgroundWorkStatusBarObserver.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { BaseStatusBarItemObserver } from './baseStatusBarItemObserver'; -import { BaseEvent, OmnisharpBackgroundDiagnosticStatus } from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; -import { BackgroundDiagnosticStatus } from '../omnisharp/protocol'; +import { BaseEvent, OmnisharpBackgroundDiagnosticStatus } from '../loggingEvents'; +import { EventType } from '../eventType'; +import { BackgroundDiagnosticStatus } from '../protocol'; export class BackgroundWorkStatusBarObserver extends BaseStatusBarItemObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/baseStatusBarItemObserver.ts b/src/omnisharp/observers/baseStatusBarItemObserver.ts similarity index 91% rename from src/observers/baseStatusBarItemObserver.ts rename to src/omnisharp/observers/baseStatusBarItemObserver.ts index c36c217ab..a58b71fe8 100644 --- a/src/observers/baseStatusBarItemObserver.ts +++ b/src/omnisharp/observers/baseStatusBarItemObserver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { StatusBarItem } from '../vscodeAdapter'; -import { BaseEvent } from '../omnisharp/loggingEvents'; +import { StatusBarItem } from '../../vscodeAdapter'; +import { BaseEvent } from '../loggingEvents'; export abstract class BaseStatusBarItemObserver { constructor(private statusBarItem: StatusBarItem) {} diff --git a/src/observers/dotnetChannelObserver.ts b/src/omnisharp/observers/dotnetChannelObserver.ts similarity index 79% rename from src/observers/dotnetChannelObserver.ts rename to src/omnisharp/observers/dotnetChannelObserver.ts index 349b8fdde..e4712481f 100644 --- a/src/observers/dotnetChannelObserver.ts +++ b/src/omnisharp/observers/dotnetChannelObserver.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseChannelObserver } from './baseChannelObserver'; -import { BaseEvent } from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; +import { BaseChannelObserver } from '../../shared/observers/baseChannelObserver'; +import { BaseEvent } from '../loggingEvents'; +import { EventType } from '../eventType'; export class DotNetChannelObserver extends BaseChannelObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/dotnetLoggerObserver.ts b/src/omnisharp/observers/dotnetLoggerObserver.ts similarity index 88% rename from src/observers/dotnetLoggerObserver.ts rename to src/omnisharp/observers/dotnetLoggerObserver.ts index 922cf1762..8b7d422fb 100644 --- a/src/observers/dotnetLoggerObserver.ts +++ b/src/omnisharp/observers/dotnetLoggerObserver.ts @@ -2,14 +2,14 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseLoggerObserver } from './baseLoggerObserver'; +import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; import { BaseEvent, CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, CommandDotNetRestoreFailed, -} from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; +} from '../loggingEvents'; +import { EventType } from '../eventType'; export class DotnetLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/dotnetTestChannelObserver.ts b/src/omnisharp/observers/dotnetTestChannelObserver.ts similarity index 84% rename from src/observers/dotnetTestChannelObserver.ts rename to src/omnisharp/observers/dotnetTestChannelObserver.ts index 865d7d3b1..fab4d0b65 100644 --- a/src/observers/dotnetTestChannelObserver.ts +++ b/src/omnisharp/observers/dotnetTestChannelObserver.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseChannelObserver } from './baseChannelObserver'; -import { BaseEvent } from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; +import { BaseChannelObserver } from '../../shared/observers/baseChannelObserver'; +import { BaseEvent } from '../loggingEvents'; +import { EventType } from '../eventType'; export default class DotnetTestChannelObserver extends BaseChannelObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/dotnetTestLoggerObserver.ts b/src/omnisharp/observers/dotnetTestLoggerObserver.ts similarity index 97% rename from src/observers/dotnetTestLoggerObserver.ts rename to src/omnisharp/observers/dotnetTestLoggerObserver.ts index 580232f45..5a4e4f9ae 100644 --- a/src/observers/dotnetTestLoggerObserver.ts +++ b/src/omnisharp/observers/dotnetTestLoggerObserver.ts @@ -15,10 +15,10 @@ import { DotNetTestsInClassRunStart, DotNetTestRunInContextStart, DotNetTestDebugInContextStart, -} from '../omnisharp/loggingEvents'; -import { BaseLoggerObserver } from './baseLoggerObserver'; -import * as protocol from '../omnisharp/protocol'; -import { EventType } from '../omnisharp/eventType'; +} from '../loggingEvents'; +import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; +import * as protocol from '../protocol'; +import { EventType } from '../eventType'; export default class DotNetTestLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/errorMessageObserver.ts b/src/omnisharp/observers/errorMessageObserver.ts similarity index 94% rename from src/observers/errorMessageObserver.ts rename to src/omnisharp/observers/errorMessageObserver.ts index 26b1ef660..12aa1a848 100644 --- a/src/observers/errorMessageObserver.ts +++ b/src/omnisharp/observers/errorMessageObserver.ts @@ -9,10 +9,10 @@ import { DotNetTestRunFailure, DotNetTestDebugStartFailure, IntegrityCheckFailure, -} from '../omnisharp/loggingEvents'; -import { vscode } from '../vscodeAdapter'; +} from '../loggingEvents'; +import { vscode } from '../../vscodeAdapter'; import showErrorMessage from './utils/showErrorMessage'; -import { EventType } from '../omnisharp/eventType'; +import { EventType } from '../eventType'; import { l10n } from 'vscode'; export class ErrorMessageObserver { diff --git a/src/observers/informationMessageObserver.ts b/src/omnisharp/observers/informationMessageObserver.ts similarity index 81% rename from src/observers/informationMessageObserver.ts rename to src/omnisharp/observers/informationMessageObserver.ts index cef60c940..8cdc02590 100644 --- a/src/observers/informationMessageObserver.ts +++ b/src/omnisharp/observers/informationMessageObserver.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as ObservableEvent from '../omnisharp/loggingEvents'; -import { vscode } from '../vscodeAdapter'; -import showInformationMessage from '../shared/observers/utils/showInformationMessage'; -import { EventType } from '../omnisharp/eventType'; -import { omnisharpOptions } from '../shared/options'; +import * as ObservableEvent from '../loggingEvents'; +import { vscode } from '../../vscodeAdapter'; +import showInformationMessage from '../../shared/observers/utils/showInformationMessage'; +import { EventType } from '../eventType'; +import { omnisharpOptions } from '../../shared/options'; import { l10n } from 'vscode'; export class InformationMessageObserver { diff --git a/src/observers/omnisharpChannelObserver.ts b/src/omnisharp/observers/omnisharpChannelObserver.ts similarity index 80% rename from src/observers/omnisharpChannelObserver.ts rename to src/omnisharp/observers/omnisharpChannelObserver.ts index d0b5f6930..c60709fdf 100644 --- a/src/observers/omnisharpChannelObserver.ts +++ b/src/omnisharp/observers/omnisharpChannelObserver.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseChannelObserver } from './baseChannelObserver'; -import { OutputChannel } from '../vscodeAdapter'; -import { BaseEvent } from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; -import { omnisharpOptions } from '../shared/options'; +import { BaseChannelObserver } from '../../shared/observers/baseChannelObserver'; +import { OutputChannel } from '../../vscodeAdapter'; +import { BaseEvent } from '../loggingEvents'; +import { EventType } from '../eventType'; +import { omnisharpOptions } from '../../shared/options'; export class OmnisharpChannelObserver extends BaseChannelObserver { constructor(channel: OutputChannel) { diff --git a/src/observers/omnisharpDebugModeLoggerObserver.ts b/src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts similarity index 97% rename from src/observers/omnisharpDebugModeLoggerObserver.ts rename to src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts index bae071a9d..8ddd0f9c4 100644 --- a/src/observers/omnisharpDebugModeLoggerObserver.ts +++ b/src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseLoggerObserver } from './baseLoggerObserver'; +import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; import * as os from 'os'; import { BaseEvent, @@ -14,8 +14,8 @@ import { OmnisharpServerVerboseMessage, OmnisharpServerProcessRequestStart, OmnisharpEventPacketReceived, -} from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; +} from '../loggingEvents'; +import { EventType } from '../eventType'; export class OmnisharpDebugModeLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/omnisharpLoggerObserver.ts b/src/omnisharp/observers/omnisharpLoggerObserver.ts similarity index 96% rename from src/observers/omnisharpLoggerObserver.ts rename to src/omnisharp/observers/omnisharpLoggerObserver.ts index 4e2e2ffdc..6eb82b334 100644 --- a/src/observers/omnisharpLoggerObserver.ts +++ b/src/omnisharp/observers/omnisharpLoggerObserver.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseLoggerObserver } from './baseLoggerObserver'; +import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; import { BaseEvent, OmnisharpInitialisation, @@ -15,12 +15,12 @@ import { OmnisharpServerMsBuildProjectDiagnostics, OmnisharpServerOnStdErr, OmnisharpEventPacketReceived, -} from '../omnisharp/loggingEvents'; +} from '../loggingEvents'; import * as os from 'os'; -import { EventType } from '../omnisharp/eventType'; +import { EventType } from '../eventType'; import * as vscode from 'vscode'; -import { PlatformInformation } from '../shared/platform'; -import { Logger } from '../logger'; +import { PlatformInformation } from '../../shared/platform'; +import { Logger } from '../../logger'; export class OmnisharpLoggerObserver extends BaseLoggerObserver { constructor(channel: vscode.OutputChannel | Logger, private platformInformation: PlatformInformation) { diff --git a/src/observers/omnisharpStatusBarObserver.ts b/src/omnisharp/observers/omnisharpStatusBarObserver.ts similarity index 97% rename from src/observers/omnisharpStatusBarObserver.ts rename to src/omnisharp/observers/omnisharpStatusBarObserver.ts index 3c5681b0b..fe0af3a7b 100644 --- a/src/observers/omnisharpStatusBarObserver.ts +++ b/src/omnisharp/observers/omnisharpStatusBarObserver.ts @@ -9,9 +9,9 @@ import { InstallationStart, DownloadProgress, OmnisharpServerOnStdErr, -} from '../omnisharp/loggingEvents'; +} from '../loggingEvents'; import { BaseStatusBarItemObserver } from './baseStatusBarItemObserver'; -import { EventType } from '../omnisharp/eventType'; +import { EventType } from '../eventType'; export enum StatusBarColors { Red = 'rgb(218,0,0)', diff --git a/src/observers/projectStatusBarObserver.ts b/src/omnisharp/observers/projectStatusBarObserver.ts similarity index 92% rename from src/observers/projectStatusBarObserver.ts rename to src/omnisharp/observers/projectStatusBarObserver.ts index 22e794da0..3c2db8439 100644 --- a/src/observers/projectStatusBarObserver.ts +++ b/src/omnisharp/observers/projectStatusBarObserver.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { basename } from 'path'; -import { BaseEvent, WorkspaceInformationUpdated } from '../omnisharp/loggingEvents'; +import { BaseEvent, WorkspaceInformationUpdated } from '../loggingEvents'; import { BaseStatusBarItemObserver } from './baseStatusBarItemObserver'; -import { EventType } from '../omnisharp/eventType'; +import { EventType } from '../eventType'; export class ProjectStatusBarObserver extends BaseStatusBarItemObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/razorLoggerObserver.ts b/src/omnisharp/observers/razorLoggerObserver.ts similarity index 91% rename from src/observers/razorLoggerObserver.ts rename to src/omnisharp/observers/razorLoggerObserver.ts index 6f08726da..212d6e4f7 100644 --- a/src/observers/razorLoggerObserver.ts +++ b/src/omnisharp/observers/razorLoggerObserver.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseLoggerObserver } from './baseLoggerObserver'; -import { RazorPluginPathSpecified, BaseEvent, RazorPluginPathDoesNotExist } from '../omnisharp/loggingEvents'; -import { EventType } from '../omnisharp/eventType'; +import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; +import { RazorPluginPathSpecified, BaseEvent, RazorPluginPathDoesNotExist } from '../loggingEvents'; +import { EventType } from '../eventType'; export class RazorLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/observers/telemetryObserver.ts b/src/omnisharp/observers/telemetryObserver.ts similarity index 91% rename from src/observers/telemetryObserver.ts rename to src/omnisharp/observers/telemetryObserver.ts index 93df8aa0e..15e1eefdd 100644 --- a/src/observers/telemetryObserver.ts +++ b/src/omnisharp/observers/telemetryObserver.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { PlatformInformation } from '../shared/platform'; +import { PlatformInformation } from '../../shared/platform'; import { BaseEvent, InstallationFailure, @@ -13,13 +13,13 @@ import { ProjectConfiguration, TelemetryErrorEvent, OmnisharpInitialisation, -} from '../omnisharp/loggingEvents'; -import { PackageError } from '../packageManager/packageError'; -import { EventType } from '../omnisharp/eventType'; -import { getDotnetInfo } from '../shared/utils/getDotnetInfo'; -import { DotnetInfo } from '../shared/utils/dotnetInfo'; -import { ITelemetryReporter, getTelemetryProps } from '../shared/telemetryReporter'; -import { reportProjectConfigurationEvent } from '../shared/projectConfiguration'; +} from '../loggingEvents'; +import { PackageError } from '../../packageManager/packageError'; +import { EventType } from '../eventType'; +import { getDotnetInfo } from '../../shared/utils/getDotnetInfo'; +import { DotnetInfo } from '../../shared/utils/dotnetInfo'; +import { ITelemetryReporter, getTelemetryProps } from '../../shared/telemetryReporter'; +import { reportProjectConfigurationEvent } from '../../shared/projectConfiguration'; export class TelemetryObserver { private reporter: ITelemetryReporter; diff --git a/src/observers/utils/messageItemWithCommand.ts b/src/omnisharp/observers/utils/messageItemWithCommand.ts similarity index 89% rename from src/observers/utils/messageItemWithCommand.ts rename to src/omnisharp/observers/utils/messageItemWithCommand.ts index 04ead5fe7..f6d9df502 100644 --- a/src/observers/utils/messageItemWithCommand.ts +++ b/src/omnisharp/observers/utils/messageItemWithCommand.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { MessageItem } from '../../vscodeAdapter'; +import { MessageItem } from '../../../vscodeAdapter'; export default interface MessageItemWithCommand extends MessageItem { command: string; diff --git a/src/observers/utils/showErrorMessage.ts b/src/omnisharp/observers/utils/showErrorMessage.ts similarity index 92% rename from src/observers/utils/showErrorMessage.ts rename to src/omnisharp/observers/utils/showErrorMessage.ts index e74843eed..bf0ab6759 100644 --- a/src/observers/utils/showErrorMessage.ts +++ b/src/omnisharp/observers/utils/showErrorMessage.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { vscode } from '../../vscodeAdapter'; +import { vscode } from '../../../vscodeAdapter'; export default async function showErrorMessage(vscode: vscode, message: string, ...items: string[]) { try { diff --git a/src/observers/utils/showWarningMessage.ts b/src/omnisharp/observers/utils/showWarningMessage.ts similarity index 94% rename from src/observers/utils/showWarningMessage.ts rename to src/omnisharp/observers/utils/showWarningMessage.ts index 14d5f790f..2d54a16c1 100644 --- a/src/observers/utils/showWarningMessage.ts +++ b/src/omnisharp/observers/utils/showWarningMessage.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { vscode } from '../../vscodeAdapter'; +import { vscode } from '../../../vscodeAdapter'; import MessageItemWithCommand from './messageItemWithCommand'; export default async function showWarningMessage(vscode: vscode, message: string, ...items: MessageItemWithCommand[]) { diff --git a/src/observers/warningMessageObserver.ts b/src/omnisharp/observers/warningMessageObserver.ts similarity index 93% rename from src/observers/warningMessageObserver.ts rename to src/omnisharp/observers/warningMessageObserver.ts index 70d5515f7..5613cc28b 100644 --- a/src/observers/warningMessageObserver.ts +++ b/src/omnisharp/observers/warningMessageObserver.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { debounceTime } from 'rxjs/operators'; -import { vscode } from '../vscodeAdapter'; -import { BaseEvent, OmnisharpServerMsBuildProjectDiagnostics } from '../omnisharp/loggingEvents'; +import { vscode } from '../../vscodeAdapter'; +import { BaseEvent, OmnisharpServerMsBuildProjectDiagnostics } from '../loggingEvents'; import { Scheduler, Subject } from 'rxjs'; import showWarningMessage from './utils/showWarningMessage'; -import { EventType } from '../omnisharp/eventType'; +import { EventType } from '../eventType'; import { l10n } from 'vscode'; export class WarningMessageObserver { diff --git a/src/omnisharp/extension.ts b/src/omnisharp/omnisharpLanguageServer.ts similarity index 56% rename from src/omnisharp/extension.ts rename to src/omnisharp/omnisharpLanguageServer.ts index cdf267b7e..5fb478ee2 100644 --- a/src/omnisharp/extension.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -3,27 +3,43 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as utils from './utils'; import * as vscode from 'vscode'; -import { addAssetsIfNecessary } from '../shared/assets'; -import { safeLength, sum } from '../common'; -import { DotnetWorkspaceConfigurationProvider } from '../shared/workspaceConfigurationProvider'; -import { OmniSharpServer } from './server'; -import TestManager from '../features/dotnetTest'; -import registerCommands from '../features/commands'; -import { PlatformInformation } from '../shared/platform'; -import { ProjectJsonDeprecatedWarning, OmnisharpStart, RazorDevModeActive } from './loggingEvents'; +import * as utils from './utils'; +import { DotNetChannelObserver } from './observers/dotnetChannelObserver'; +import { DotnetLoggerObserver } from './observers/dotnetLoggerObserver'; +import DotNetTestLoggerObserver from './observers/dotnetTestLoggerObserver'; +import DotNetTestChannelObserver from './observers/dotnetTestChannelObserver'; +import { OmnisharpLoggerObserver } from './observers/omnisharpLoggerObserver'; +import { OmnisharpChannelObserver } from './observers/omnisharpChannelObserver'; +import { WarningMessageObserver } from './observers/warningMessageObserver'; +import { InformationMessageObserver } from './observers/informationMessageObserver'; +import { ErrorMessageObserver } from './observers/errorMessageObserver'; +import { StatusBarItemAdapter } from '../statusBarItemAdapter'; +import { OmnisharpStatusBarObserver } from './observers/omnisharpStatusBarObserver'; import { EventStream } from '../eventStream'; import { NetworkSettingsProvider } from '../networkSettings'; +import { PlatformInformation } from '../shared/platform'; +import { ProjectStatusBarObserver } from './observers/projectStatusBarObserver'; +import { BackgroundWorkStatusBarObserver } from './observers/backgroundWorkStatusBarObserver'; +import { OmnisharpDebugModeLoggerObserver } from './observers/omnisharpDebugModeLoggerObserver'; +import { RazorLoggerObserver } from './observers/razorLoggerObserver'; +import { RazorOmnisharpDownloader } from '../razor/razorOmnisharpDownloader'; +import { omnisharpOptions, razorOptions } from '../shared/options'; import CompositeDisposable from '../compositeDisposable'; -import Disposable from '../disposable'; import { OmniSharpMonoResolver } from './omniSharpMonoResolver'; -import { getMonoVersion } from '../utils/getMonoVersion'; -import { LanguageMiddlewareFeature } from './languageMiddlewareFeature'; import { DotnetResolver } from './dotnetResolver'; -import { Advisor } from '../features/diagnosticsProvider'; +import { LanguageMiddlewareFeature } from './languageMiddlewareFeature'; +import { OmniSharpServer } from './server'; +import { Advisor } from './features/diagnosticsProvider'; +import TestManager from './features/dotnetTest'; import { OmnisharpWorkspaceDebugInformationProvider } from '../omnisharpWorkspaceDebugInformationProvider'; -import { omnisharpOptions, razorOptions } from '../shared/options'; +import Disposable from '../disposable'; +import registerCommands from './features/commands'; +import { addAssetsIfNecessary } from '../shared/assets'; +import { OmnisharpStart, ProjectJsonDeprecatedWarning, RazorDevModeActive } from './loggingEvents'; +import { DotnetWorkspaceConfigurationProvider } from '../shared/workspaceConfigurationProvider'; +import { getMonoVersion } from '../utils/getMonoVersion'; +import { safeLength, sum } from '../common'; export interface ActivationResult { readonly server: OmniSharpServer; @@ -31,7 +47,108 @@ export interface ActivationResult { readonly testManager: TestManager; } -export async function activate( +export async function activateOmniSharpLanguageServer( + context: vscode.ExtensionContext, + platformInfo: PlatformInformation, + networkSettingsProvider: NetworkSettingsProvider, + eventStream: EventStream, + csharpChannel: vscode.OutputChannel, + dotnetTestChannel: vscode.OutputChannel, + dotnetChannel: vscode.OutputChannel +): Promise { + // Set command enablement to use O# commands. + vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'OmniSharp'); + + const dotnetChannelObserver = new DotNetChannelObserver(dotnetChannel); + const dotnetLoggerObserver = new DotnetLoggerObserver(dotnetChannel); + eventStream.subscribe(dotnetChannelObserver.post); + eventStream.subscribe(dotnetLoggerObserver.post); + + const dotnetTestChannelObserver = new DotNetTestChannelObserver(dotnetTestChannel); + const dotnetTestLoggerObserver = new DotNetTestLoggerObserver(dotnetTestChannel); + eventStream.subscribe(dotnetTestChannelObserver.post); + eventStream.subscribe(dotnetTestLoggerObserver.post); + + const omnisharpChannel = vscode.window.createOutputChannel('OmniSharp Log'); + const omnisharpLogObserver = new OmnisharpLoggerObserver(omnisharpChannel, platformInfo); + const omnisharpChannelObserver = new OmnisharpChannelObserver(omnisharpChannel); + eventStream.subscribe(omnisharpLogObserver.post); + eventStream.subscribe(omnisharpChannelObserver.post); + + const warningMessageObserver = new WarningMessageObserver( + vscode, + () => omnisharpOptions.disableMSBuildDiagnosticWarning || false + ); + eventStream.subscribe(warningMessageObserver.post); + + const informationMessageObserver = new InformationMessageObserver(vscode); + eventStream.subscribe(informationMessageObserver.post); + + const errorMessageObserver = new ErrorMessageObserver(vscode); + eventStream.subscribe(errorMessageObserver.post); + + const omnisharpStatusBar = new StatusBarItemAdapter( + vscode.window.createStatusBarItem( + 'C#-Language-Service-Status', + vscode.StatusBarAlignment.Left, + Number.MIN_VALUE + 2 + ) + ); + omnisharpStatusBar.name = 'C# Language Service Status'; + const omnisharpStatusBarObserver = new OmnisharpStatusBarObserver(omnisharpStatusBar); + eventStream.subscribe(omnisharpStatusBarObserver.post); + + const projectStatusBar = new StatusBarItemAdapter( + vscode.window.createStatusBarItem('C#-Project-Selector', vscode.StatusBarAlignment.Left, Number.MIN_VALUE + 1) + ); + projectStatusBar.name = 'C# Project Selector'; + const projectStatusBarObserver = new ProjectStatusBarObserver(projectStatusBar); + eventStream.subscribe(projectStatusBarObserver.post); + + const backgroundWorkStatusBar = new StatusBarItemAdapter( + vscode.window.createStatusBarItem('C#-Code-Analysis', vscode.StatusBarAlignment.Left, Number.MIN_VALUE) + ); + backgroundWorkStatusBar.name = 'C# Code Analysis'; + const backgroundWorkStatusBarObserver = new BackgroundWorkStatusBarObserver(backgroundWorkStatusBar); + eventStream.subscribe(backgroundWorkStatusBarObserver.post); + + const debugMode = false; + if (debugMode) { + const omnisharpDebugModeLoggerObserver = new OmnisharpDebugModeLoggerObserver(omnisharpChannel); + eventStream.subscribe(omnisharpDebugModeLoggerObserver.post); + } + + const razorObserver = new RazorLoggerObserver(csharpChannel); + eventStream.subscribe(razorObserver.post); + + if (!razorOptions.razorDevMode) { + // Download Razor O# server + const razorOmnisharpDownloader = new RazorOmnisharpDownloader( + networkSettingsProvider, + eventStream, + context.extension.packageJSON, + platformInfo, + context.extension.extensionPath + ); + + await razorOmnisharpDownloader.DownloadAndInstallRazorOmnisharp( + context.extension.packageJSON.defaults.razorOmnisharp + ); + } + + // activate language services + return activate( + context, + context.extension.packageJSON, + platformInfo, + networkSettingsProvider, + eventStream, + context.extension.extensionPath, + omnisharpChannel + ); +} + +async function activate( context: vscode.ExtensionContext, packageJSON: any, platformInfo: PlatformInformation, diff --git a/src/omnisharp/server.ts b/src/omnisharp/server.ts index e9d04768b..7eccbeffc 100644 --- a/src/omnisharp/server.ts +++ b/src/omnisharp/server.ts @@ -6,7 +6,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as protocol from './protocol'; -import * as serverUtils from '../omnisharp/utils'; +import * as serverUtils from './utils'; import { vscode, CancellationToken } from '../vscodeAdapter'; import { LaunchTarget, LaunchTargetKind } from '../shared/launchTarget'; import { DelayTracker } from './delayTracker'; @@ -27,10 +27,10 @@ import { LspEngine } from './engines/lspEngine'; import { IEngine } from './engines/IEngine'; import { StdioEngine } from './engines/stdioEngine'; import { IHostExecutableResolver } from '../shared/constants/IHostExecutableResolver'; -import { showProjectSelector } from '../features/commands'; +import { showProjectSelector } from './features/commands'; import { validateRequirements } from './requirementCheck'; -import { Advisor } from '../features/diagnosticsProvider'; -import TestManager from '../features/dotnetTest'; +import { Advisor } from './features/diagnosticsProvider'; +import TestManager from './features/dotnetTest'; import { findLaunchTargets } from './launcher'; import { ProjectConfigurationMessage } from '../shared/projectConfiguration'; import { commonOptions, omnisharpOptions, razorOptions } from '../shared/options'; diff --git a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts index 9530e493b..beecd91d8 100644 --- a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts +++ b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts @@ -13,7 +13,7 @@ import { RazorLogger } from '../razorLogger'; import { JS_DEBUG_NAME, SERVER_APP_NAME } from './constants'; import { onDidTerminateDebugSession } from './terminateDebugHandler'; import showInformationMessage from '../../../shared/observers/utils/showInformationMessage'; -import showErrorMessage from '../../../observers/utils/showErrorMessage'; +import showErrorMessage from '../../../omnisharp/observers/utils/showErrorMessage'; export class BlazorDebugConfigurationProvider implements vscode.DebugConfigurationProvider { private static readonly autoDetectUserNotice: string = vscode.l10n.t( diff --git a/src/shared/configurationProvider.ts b/src/shared/configurationProvider.ts index 942f36771..08f1528ea 100644 --- a/src/shared/configurationProvider.ts +++ b/src/shared/configurationProvider.ts @@ -14,7 +14,7 @@ import { RemoteAttachPicker, DotNetAttachItemsProviderFactory, AttachPicker, -} from '../features/processPicker'; +} from '../omnisharp/features/processPicker'; import { PlatformInformation } from './platform'; import { getCSharpDevKit } from '../utils/getCSharpDevKit'; import { commonOptions } from './options'; diff --git a/src/observers/baseChannelObserver.ts b/src/shared/observers/baseChannelObserver.ts similarity index 86% rename from src/observers/baseChannelObserver.ts rename to src/shared/observers/baseChannelObserver.ts index 10118dbd4..4a66600ae 100644 --- a/src/observers/baseChannelObserver.ts +++ b/src/shared/observers/baseChannelObserver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from '../vscodeAdapter'; -import { BaseEvent } from '../omnisharp/loggingEvents'; +import * as vscode from '../../vscodeAdapter'; +import { BaseEvent } from '../../omnisharp/loggingEvents'; export abstract class BaseChannelObserver { constructor(private channel: vscode.OutputChannel) {} diff --git a/src/observers/baseLoggerObserver.ts b/src/shared/observers/baseLoggerObserver.ts similarity index 83% rename from src/observers/baseLoggerObserver.ts rename to src/shared/observers/baseLoggerObserver.ts index abda503c7..5f79b00f4 100644 --- a/src/observers/baseLoggerObserver.ts +++ b/src/shared/observers/baseLoggerObserver.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from '../vscodeAdapter'; -import { Logger } from '../logger'; -import { BaseEvent } from '../omnisharp/loggingEvents'; +import * as vscode from '../../vscodeAdapter'; +import { Logger } from '../../logger'; +import { BaseEvent } from '../../omnisharp/loggingEvents'; export abstract class BaseLoggerObserver { public logger: Logger; diff --git a/src/shared/observers/csharpChannelObserver.ts b/src/shared/observers/csharpChannelObserver.ts index 634f42cf9..836eca025 100644 --- a/src/shared/observers/csharpChannelObserver.ts +++ b/src/shared/observers/csharpChannelObserver.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseChannelObserver } from '../../observers/baseChannelObserver'; +import { BaseChannelObserver } from './baseChannelObserver'; import { EventType } from '../../omnisharp/eventType'; import { BaseEvent } from '../../omnisharp/loggingEvents'; diff --git a/src/shared/observers/csharpLoggerObserver.ts b/src/shared/observers/csharpLoggerObserver.ts index 3a78e8a10..bddfb57e3 100644 --- a/src/shared/observers/csharpLoggerObserver.ts +++ b/src/shared/observers/csharpLoggerObserver.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { BaseLoggerObserver } from '../../observers/baseLoggerObserver'; +import { BaseLoggerObserver } from './baseLoggerObserver'; import * as Event from '../../omnisharp/loggingEvents'; import { PackageError } from '../../packageManager/packageError'; import { EventType } from '../../omnisharp/eventType'; diff --git a/src/shared/observers/utils/showInformationMessage.ts b/src/shared/observers/utils/showInformationMessage.ts index 780e71312..40931cbab 100644 --- a/src/shared/observers/utils/showInformationMessage.ts +++ b/src/shared/observers/utils/showInformationMessage.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { vscode } from '../../../vscodeAdapter'; -import MessageItemWithCommand from '../../../observers/utils/messageItemWithCommand'; +import MessageItemWithCommand from '../../../omnisharp/observers/utils/messageItemWithCommand'; export default async function showInformationMessage( vscode: vscode, From 45185b2f4f59c61af27a8995033b7b814b6c7a23 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 6 Sep 2024 11:28:54 -0700 Subject: [PATCH 039/100] Use older version of VSCode in integration tests to workaround extension install issue --- test/vscodeLauncher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/vscodeLauncher.ts b/test/vscodeLauncher.ts index 4e3f70e20..9b309c1eb 100644 --- a/test/vscodeLauncher.ts +++ b/test/vscodeLauncher.ts @@ -17,7 +17,7 @@ function getSln(workspacePath: string): string | undefined { async function main() { try { - const vscodeExecutablePath = await downloadAndUnzipVSCode('stable'); + const vscodeExecutablePath = await downloadAndUnzipVSCode('1.92.2'); const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath); console.log('Display: ' + process.env.DISPLAY); From 6ecdc2cd3299a44f26d91dd0e63f190b383e92e1 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 6 Sep 2024 11:39:57 -0700 Subject: [PATCH 040/100] Reorder publish args --- azure-pipelines/release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/release.yml b/azure-pipelines/release.yml index 3f8fa66ab..5783ad962 100644 --- a/azure-pipelines/release.yml +++ b/azure-pipelines/release.yml @@ -89,13 +89,14 @@ extends: $publishArtifacts = $allArtifacts[0] Write-Host "All artifacts: $($allArtifacts). Publishing $($publishArtifacts)." - $basePublishArgs = , "publish --azure-credential" + $basePublishArgs = , "publish" If ( $uploadPrerelease ) { $basePublishArgs += "--pre-release" Write-Host "Publish to pre-release channel." } Else { Write-Host "Publish to release channel." } + $basePublishArgs += '--azure-credential' $basePublishArgs += '--packagePath' $publishArgs = $basePublishArgs + (Get-ChildItem $publishArtifacts\*.vsix | Sort-Object Name -Descending |% { $_ }) From f92b739cd2f47a9ab5228058bb752f16e0257bad Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 6 Sep 2024 12:30:43 -0700 Subject: [PATCH 041/100] Remove unnecessary settings. --- .devcontainer/devcontainer.json | 8 -------- .vscode/dneng-schema.json | 1 + 2 files changed, 1 insertion(+), 8 deletions(-) create mode 100644 .vscode/dneng-schema.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bdc4643e4..58971cf2d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -32,14 +32,6 @@ "*.xlf": "xml", "*.yml": "azure-pipelines" }, - // ms-dotnettools.csharp settings - "omnisharp.disableMSBuildDiagnosticWarning": true, - "omnisharp.enableEditorConfigSupport": true, - "omnisharp.enableImportCompletion": true, - "omnisharp.useModernNet": true, - "omnisharp.enableAsyncCompletion": true, - // ms-dotnettools.csdevkit settings - "dotnet.defaultSolution": "Roslyn.sln", // ms-vscode.powershell settings "powershell.promptToUpdatePowerShell": false, "powershell.integratedConsole.showOnStartup": false, diff --git a/.vscode/dneng-schema.json b/.vscode/dneng-schema.json new file mode 100644 index 000000000..cc0f88ba4 --- /dev/null +++ b/.vscode/dneng-schema.json @@ -0,0 +1 @@ +{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://github.com/Microsoft/azure-pipelines-vscode/blob/main/service-schema.json","$comment":"v1.183.0","title":"Pipeline schema","description":"A pipeline definition","oneOf":[{"$ref":"#/definitions/pipeline"},{"type":"string","pattern":"^$"}],"definitions":{"string":{"type":"string"},"sequence":{"type":"array","items":{"$ref":"#/definitions/any"}},"mapping":{"type":"object","additionalProperties":true},"any":{"anyOf":[{"type":"string"},{"type":"array","items":{"$ref":"#/definitions/any"}},{"type":"object","additionalProperties":true}]},"pipeline":{"anyOf":[{"type":"object","properties":{"stages":{"description":"Stages are groups of jobs that can run without human intervention","$ref":"#/definitions/stages"},"pool":{"description":"Pool where jobs in this pipeline will run unless otherwise specified","$ref":"#/definitions/pool"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"required":["stages"]},{"type":"object","properties":{"extends":{"description":"Extends a template","$ref":"#/definitions/extends"},"pool":{"description":"Pool where jobs in this pipeline will run unless otherwise specified","$ref":"#/definitions/pool"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"required":["extends"]},{"type":"object","properties":{"jobs":{"description":"Jobs represent units of work which can be assigned to a single agent or server","$ref":"#/definitions/jobs"},"pool":{"description":"Pool where jobs in this pipeline will run unless otherwise specified","$ref":"#/definitions/pool"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"required":["jobs"]},{"type":"object","properties":{"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/phases"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"required":["phases"]},{"type":"object","properties":{"strategy":{"description":"Execution strategy for this job","$ref":"#/definitions/jobStrategy"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/pool"},"container":{"description":"Container resource name","$ref":"#/definitions/jobContainer"},"services":{"$ref":"#/definitions/jobServices"},"workspace":{"$ref":"#/definitions/jobWorkspace"},"steps":{"description":"A list of steps to run in this job","$ref":"#/definitions/steps"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"required":["steps"]},{"type":"object","properties":{"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/phaseQueueTarget"},"steps":{"description":"A list of steps to run in this phase","$ref":"#/definitions/steps"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"deprecationMessage":"This option is deprecated, use `job` (inside `jobs`) instead","required":["steps"]},{"type":"object","properties":{"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/phaseServerTarget"},"steps":{"description":"A list of steps to run in this phase","$ref":"#/definitions/steps"},"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"deprecationMessage":"This option is deprecated, use `job` (inside `jobs`) instead","required":["steps"]}]},"pipelineBase":{"type":"object","properties":{"name":{"description":"Pipeline name","$ref":"#/definitions/string_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"schedules":{"$ref":"#/definitions/schedules"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/resources"},"variables":{"description":"Variables for this pipeline","$ref":"#/definitions/variables"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false},"pipelineTrigger":{"type":"object","properties":{"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/trigger"},"name":{"description":"Pipeline name","$ref":"#/definitions/any_allowExpressions"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/any_allowExpressions"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/any_allowExpressions"},"schedules":{"$ref":"#/definitions/any_allowExpressions"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/any_allowExpressions"},"variables":{"description":"Variables for the entire pipeline","$ref":"#/definitions/any_allowExpressions"},"stages":{"$ref":"#/definitions/any_allowExpressions"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/any_allowExpressions"},"extends":{"description":"Extends a template","$ref":"#/definitions/any_allowExpressions"},"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"strategy":{"description":"Execution strategy for the job","$ref":"#/definitions/any_allowExpressions"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/any_allowExpressions"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/any_allowExpressions"},"container":{"description":"Container resource name","$ref":"#/definitions/any_allowExpressions"},"services":{"$ref":"#/definitions/any_allowExpressions"},"workspace":{"$ref":"#/definitions/any_allowExpressions"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/any_allowExpressions"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false},"pipelineParameters":{"type":"object","properties":{"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/pipelineTemplateParameters"},"name":{"description":"Pipeline name","$ref":"#/definitions/any_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/any_allowExpressions"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/any_allowExpressions"},"schedules":{"$ref":"#/definitions/any_allowExpressions"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/any_allowExpressions"},"variables":{"description":"Variables for the entire pipeline","$ref":"#/definitions/any_allowExpressions"},"stages":{"$ref":"#/definitions/any_allowExpressions"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/any_allowExpressions"},"extends":{"description":"Extends a template","$ref":"#/definitions/any_allowExpressions"},"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"strategy":{"description":"Execution strategy for the job","$ref":"#/definitions/any_allowExpressions"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/any_allowExpressions"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/any_allowExpressions"},"container":{"description":"Container resource name","$ref":"#/definitions/any_allowExpressions"},"services":{"$ref":"#/definitions/any_allowExpressions"},"workspace":{"$ref":"#/definitions/any_allowExpressions"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/any_allowExpressions"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false},"pipelinePR":{"type":"object","properties":{"pr":{"description":"Pull request triggers","$ref":"#/definitions/pr"},"name":{"description":"Pipeline name","$ref":"#/definitions/any_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/any_allowExpressions"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/any_allowExpressions"},"schedules":{"$ref":"#/definitions/any_allowExpressions"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/any_allowExpressions"},"variables":{"description":"Variables for the entire pipeline","$ref":"#/definitions/any_allowExpressions"},"stages":{"$ref":"#/definitions/any_allowExpressions"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/any_allowExpressions"},"extends":{"description":"Extends a template","$ref":"#/definitions/any_allowExpressions"},"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"strategy":{"description":"Execution strategy for the job","$ref":"#/definitions/any_allowExpressions"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/any_allowExpressions"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/any_allowExpressions"},"container":{"description":"Container resource name","$ref":"#/definitions/any_allowExpressions"},"services":{"$ref":"#/definitions/any_allowExpressions"},"workspace":{"$ref":"#/definitions/any_allowExpressions"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/any_allowExpressions"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false},"pipelineSchedules":{"type":"object","properties":{"schedules":{"$ref":"#/definitions/schedules"},"name":{"description":"Pipeline name","$ref":"#/definitions/any_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/any_allowExpressions"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/any_allowExpressions"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/any_allowExpressions"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/any_allowExpressions"},"variables":{"description":"Variables for the entire pipeline","$ref":"#/definitions/any_allowExpressions"},"stages":{"$ref":"#/definitions/any_allowExpressions"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/any_allowExpressions"},"extends":{"description":"Extends a template","$ref":"#/definitions/any_allowExpressions"},"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"strategy":{"description":"Execution strategy for the job","$ref":"#/definitions/any_allowExpressions"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/any_allowExpressions"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/any_allowExpressions"},"container":{"description":"Container resource name","$ref":"#/definitions/any_allowExpressions"},"services":{"$ref":"#/definitions/any_allowExpressions"},"workspace":{"$ref":"#/definitions/any_allowExpressions"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/any_allowExpressions"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false},"pipelineAnyBase":{"type":"object","properties":{"name":{"description":"Pipeline name","$ref":"#/definitions/any_allowExpressions"},"trigger":{"description":"Continuous integration triggers","$ref":"#/definitions/any_allowExpressions"},"parameters":{"description":"Pipeline template parameters","$ref":"#/definitions/any_allowExpressions"},"pr":{"description":"Pull request triggers","$ref":"#/definitions/any_allowExpressions"},"schedules":{"$ref":"#/definitions/any_allowExpressions"},"resources":{"description":"Containers and repositories used in the build","$ref":"#/definitions/any_allowExpressions"},"variables":{"description":"Variables for the entire pipeline","$ref":"#/definitions/any_allowExpressions"},"stages":{"$ref":"#/definitions/any_allowExpressions"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/any_allowExpressions"},"extends":{"description":"Extends a template","$ref":"#/definitions/any_allowExpressions"},"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"strategy":{"description":"Execution strategy for the job","$ref":"#/definitions/any_allowExpressions"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/any_allowExpressions"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/any_allowExpressions"},"container":{"description":"Container resource name","$ref":"#/definitions/any_allowExpressions"},"services":{"$ref":"#/definitions/any_allowExpressions"},"workspace":{"$ref":"#/definitions/any_allowExpressions"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/any_allowExpressions"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/any_allowExpressions"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false},"pr":{"anyOf":[{"type":"string","pattern":"^none$"},{"type":"array","items":{"$ref":"#/definitions/branchFilter"}},{"type":"object","properties":{"autoCancel":{"description":"Whether to cancel running PR builds when a new commit lands in the branch","$ref":"#/definitions/boolean"},"branches":{"$ref":"#/definitions/includeExcludeFilters"},"paths":{"$ref":"#/definitions/includeExcludeFilters"},"drafts":{"description":"Whether to start a run when a draft PR is created","$ref":"#/definitions/boolean"}},"additionalProperties":false}]},"trigger":{"anyOf":[{"type":"string","pattern":"^none$"},{"type":"array","items":{"$ref":"#/definitions/branchFilter"}},{"type":"object","properties":{"batch":{"description":"Whether to batch changes per branch","$ref":"#/definitions/boolean"},"branches":{"$ref":"#/definitions/includeExcludeFilters"},"paths":{"$ref":"#/definitions/includeExcludeFilters"},"tags":{"$ref":"#/definitions/includeExcludeFilters"}},"additionalProperties":false}]},"includeExcludeFilters":{"type":"object","properties":{"include":{"$ref":"#/definitions/branchFilterArray"},"exclude":{"$ref":"#/definitions/branchFilterArray"}},"additionalProperties":false},"includeExcludeStringFilters":{"anyOf":[{"type":"array","items":{"$ref":"#/definitions/nonEmptyString"}},{"type":"object","properties":{"include":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"exclude":{"$ref":"#/definitions/sequenceOfNonEmptyString"}},"additionalProperties":false}]},"branchFilterArray":{"type":"array","items":{"$ref":"#/definitions/branchFilter"}},"branchFilter":{"type":"string","description":"branch name or prefix filter","pattern":"^[^\\/~\\^\\: \\[\\]\\\\]+(\\/[^\\/~\\^\\: \\[\\]\\\\]+)*$"},"templateParameters":{"anyOf":[{"type":"array","items":{"$ref":"#/definitions/templateParameter"}},{"type":"object","additionalProperties":true}]},"templateParameter":{"type":"object","properties":{"name":{"$ref":"#/definitions/nonEmptyString"},"displayName":{"description":"Human-readable name for the parameter","$ref":"#/definitions/string"},"type":{"$ref":"#/definitions/templateParameterType"},"default":{"$ref":"#/definitions/any"},"values":{"$ref":"#/definitions/sequenceOfNonEmptyString"}},"additionalProperties":false,"firstProperty":["name"]},"templateParameterType":{"anyOf":[{"type":"string","pattern":"^boolean$"},{"type":"string","pattern":"^container$"},{"type":"string","pattern":"^containerList$"},{"type":"string","pattern":"^deployment$"},{"type":"string","pattern":"^deploymentList$"},{"type":"string","pattern":"^job$"},{"type":"string","pattern":"^jobList$"},{"type":"string","pattern":"^legacyObject$"},{"type":"string","pattern":"^number$"},{"type":"string","pattern":"^object$"},{"type":"string","pattern":"^stage$"},{"type":"string","pattern":"^stageList$"},{"type":"string","pattern":"^step$"},{"type":"string","pattern":"^stepList$"},{"type":"string","pattern":"^string$"}]},"pipelineTemplateParameters":{"type":"array","items":{"$ref":"#/definitions/pipelineTemplateParameter"}},"pipelineTemplateParameter":{"type":"object","properties":{"name":{"$ref":"#/definitions/nonEmptyString"},"displayName":{"description":"Human-readable name for the parameter","$ref":"#/definitions/string"},"type":{"$ref":"#/definitions/pipelineTemplateParameterType"},"default":{"$ref":"#/definitions/any"},"values":{"$ref":"#/definitions/sequenceOfNonEmptyString"}},"additionalProperties":false,"firstProperty":["name"]},"pipelineTemplateParameterType":{"anyOf":[{"type":"string","pattern":"^boolean$"},{"type":"string","pattern":"^container$"},{"type":"string","pattern":"^containerList$"},{"type":"string","pattern":"^deployment$"},{"type":"string","pattern":"^deploymentList$"},{"type":"string","pattern":"^environment$"},{"type":"string","pattern":"^filePath$"},{"type":"string","pattern":"^job$"},{"type":"string","pattern":"^jobList$"},{"type":"string","pattern":"^number$"},{"type":"string","pattern":"^object$"},{"type":"string","pattern":"^pool$"},{"type":"string","pattern":"^secureFile$"},{"type":"string","pattern":"^serviceConnection$"},{"type":"string","pattern":"^stage$"},{"type":"string","pattern":"^stageList$"},{"type":"string","pattern":"^step$"},{"type":"string","pattern":"^stepList$"},{"type":"string","pattern":"^string$"}]},"schedules":{"type":"array","items":{"$ref":"#/definitions/schedule"}},"schedule":{"type":"object","properties":{"cron":{"$ref":"#/definitions/nonEmptyString"},"displayName":{"$ref":"#/definitions/string"},"branches":{"$ref":"#/definitions/includeExcludeFilters"},"batch":{"$ref":"#/definitions/boolean"},"always":{"$ref":"#/definitions/boolean"}},"additionalProperties":false,"firstProperty":["cron"]},"resources":{"anyOf":[{"type":"object","properties":{"builds":{"description":"List of external build resources","$ref":"#/definitions/buildResources"},"containers":{"description":"List of container images","$ref":"#/definitions/containerResources"},"pipelines":{"$ref":"#/definitions/pipelineResources"},"repositories":{"description":"List of external repositories","$ref":"#/definitions/repositoryResources"},"webhooks":{"description":"List of webhooks","$ref":"#/definitions/webhookResources"},"packages":{"description":"List of external packages","$ref":"#/definitions/packageResources"}},"additionalProperties":false},{"type":"array","items":{"$ref":"#/definitions/legacyResource"}}]},"buildResources":{"type":"array","items":{"$ref":"#/definitions/buildResource"}},"buildResource":{"type":"object","properties":{"build":{"description":"Alias or name of build artifact","$ref":"#/definitions/referenceName"},"type":{"description":"Name of the artifact type","$ref":"#/definitions/nonEmptyString"},"connection":{"description":"Name of the connection. This connection will be used for all the communication related to this artifact.","$ref":"#/definitions/nonEmptyString"},"source":{"description":"Name of the source definition/build/job","$ref":"#/definitions/nonEmptyString"},"version":{"$ref":"#/definitions/nonEmptyString"},"branch":{"$ref":"#/definitions/nonEmptyString"},"trigger":{"description":"When the artifact mentioned in this build resource completes a build, its allowed to trigger this pipeline.","$ref":"#/definitions/buildResourceTrigger"}},"additionalProperties":false,"firstProperty":["build"],"required":["build","type","connection","source"]},"buildResourceTrigger":{"anyOf":[{"type":"string","pattern":"^none$"},{"type":"string","pattern":"^true$"}]},"packageResources":{"type":"array","items":{"$ref":"#/definitions/packageResource"}},"packageResource":{"type":"object","properties":{"package":{"description":"Alias of package artifact","$ref":"#/definitions/referenceName"},"type":{"description":"Type of the package. Ex - NuGet, NPM etc.","$ref":"#/definitions/nonEmptyString"},"connection":{"description":"Name of the connection. This connection will be used for all the communication related to this artifact.","$ref":"#/definitions/nonEmptyString"},"name":{"description":"Name of the package","$ref":"#/definitions/nonEmptyString"},"version":{"$ref":"#/definitions/nonEmptyString"},"tag":{"$ref":"#/definitions/nonEmptyString"},"trigger":{"description":"Trigger a new pipeline run when a new version of this package is available.","$ref":"#/definitions/packageResourceTrigger"}},"additionalProperties":false,"firstProperty":["package"],"required":["package","type","connection","name"]},"packageResourceTrigger":{"anyOf":[{"type":"string","pattern":"^none$"},{"type":"string","pattern":"^true$"}]},"containerResources":{"type":"array","items":{"$ref":"#/definitions/containerResource"}},"containerResource":{"type":"object","properties":{"container":{"description":"ID for the container","$ref":"#/definitions/referenceName"},"type":{"$ref":"#/definitions/containerArtifactType"},"trigger":{"$ref":"#/definitions/containerResourceTrigger"},"endpoint":{"description":"ID of the service endpoint connecting to a private container registry","$ref":"#/definitions/string"},"env":{"description":"Variables to map into the container's environment","$ref":"#/definitions/mappingOfStringString"},"image":{"description":"Container image tag","$ref":"#/definitions/string","examples":["ubuntu:16.04","windows:1803"]},"mapDockerSocket":{"description":"Set this flag to false to force the agent not to setup the /var/run/docker.sock volume on container jobs","$ref":"#/definitions/boolean"},"options":{"description":"Options to pass into container host","$ref":"#/definitions/string"},"ports":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"volumes":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"mountReadOnly":{"$ref":"#/definitions/readOnlyMounts"}},"additionalProperties":true,"firstProperty":["container"],"required":["container","image"]},"containerArtifactType":{"anyOf":[{"type":"string","ignoreCase":"value","pattern":"^ACR$"},{"type":"string"}]},"containerResourceTrigger":{"anyOf":[{"type":"string","pattern":"^none$"},{"type":"string","pattern":"^true$"},{"type":"object","properties":{"enabled":{"$ref":"#/definitions/boolean"},"tags":{"$ref":"#/definitions/includeExcludeStringFilters"}},"additionalProperties":false}]},"pipelineResources":{"type":"array","items":{"$ref":"#/definitions/pipelineResource"}},"pipelineResource":{"type":"object","properties":{"pipeline":{"description":"ID of the pipeline resource","$ref":"#/definitions/referenceName"},"project":{"$ref":"#/definitions/nonEmptyString"},"source":{"$ref":"#/definitions/nonEmptyString"},"version":{"$ref":"#/definitions/nonEmptyString"},"branch":{"$ref":"#/definitions/nonEmptyString"},"tags":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"trigger":{"$ref":"#/definitions/pipelineResourceTrigger"}},"additionalProperties":false,"firstProperty":["pipeline"],"required":["pipeline"]},"pipelineResourceTrigger":{"anyOf":[{"type":"string","pattern":"^none$"},{"type":"string","pattern":"^true$"},{"type":"object","properties":{"enabled":{"$ref":"#/definitions/boolean"},"branches":{"$ref":"#/definitions/triggerBranchFilter"},"stages":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"tags":{"$ref":"#/definitions/sequenceOfNonEmptyString"}},"additionalProperties":false}]},"triggerBranchFilter":{"anyOf":[{"type":"object","properties":{"include":{"$ref":"#/definitions/branchFilterArray"},"exclude":{"$ref":"#/definitions/branchFilterArray"}},"additionalProperties":false},{"type":"array","items":{"$ref":"#/definitions/branchFilter"}}]},"repositoryResources":{"type":"array","items":{"$ref":"#/definitions/repositoryResource"}},"repositoryResource":{"type":"object","properties":{"repository":{"description":"ID of the external repository","$ref":"#/definitions/referenceName"},"endpoint":{"description":"ID of the service endpoint connecting to this repository","$ref":"#/definitions/nonEmptyString"},"trigger":{"$ref":"#/definitions/trigger"},"checkoutOptions":{"deprecationMessage":"This location is deprecated, `checkoutOptions` should be a peer of the `repository` keyword.","doNotSuggest":true,"$ref":"#/definitions/repositoryCheckoutOptions"}},"additionalProperties":true,"firstProperty":["repository"],"required":["repository"]},"repositoryCheckoutOptions":{"type":"object","properties":{"clean":{"description":"Scorch the repo before fetching?","enum":["true","false"],"$ref":"#/definitions/string"},"fetchDepth":{"description":"Depth of Git graph to fetch","$ref":"#/definitions/string"},"lfs":{"description":"Fetch and checkout Git LFS objects?","$ref":"#/definitions/string"},"submodules":{"description":"Fetch and checkout submodules?","$ref":"#/definitions/string"},"persistCredentials":{"description":"Keep credentials available for later use?","$ref":"#/definitions/string"}},"additionalProperties":false},"legacyResource":{"type":"object","properties":{"repo":{"$ref":"#/definitions/legacyRepoResourceAlias"},"clean":{"description":"Scorch the repo before fetching?","enum":["true","false"],"$ref":"#/definitions/string"},"fetchDepth":{"description":"Depth of Git graph to fetch","$ref":"#/definitions/string"},"lfs":{"description":"Fetch and checkout Git LFS objects?","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["repo"]},"legacyRepoResourceAlias":{"type":"string","pattern":"^self$"},"webhookResources":{"type":"array","items":{"$ref":"#/definitions/webhookResource"}},"webhookResource":{"type":"object","properties":{"webhook":{"description":"Name of the webhook","$ref":"#/definitions/referenceName"},"connection":{"description":"Name of the connection. In case of offline webhook this will be the type of Incoming Webhook otherwise it will be the type of the webhook extension.","$ref":"#/definitions/nonEmptyString"},"type":{"description":"Name of the webhook extension. leave this empty if its offline webhook.","$ref":"#/definitions/nonEmptyString"},"filters":{"description":"List of trigger filters.","$ref":"#/definitions/webhookFilters"}},"additionalProperties":false,"firstProperty":["webhook"],"required":["webhook","connection"]},"webhookFilters":{"type":"array","items":{"$ref":"#/definitions/webhookFilter"}},"webhookFilter":{"type":"object","properties":{"path":{"description":"json path to select data from event payload","$ref":"#/definitions/nonEmptyString"},"value":{"description":"Expected value for the filter to match","$ref":"#/definitions/nonEmptyString"}},"additionalProperties":false,"firstProperty":["path"],"required":["path","value"]},"variablesTemplate":{"type":"object","properties":{"parameters":{"$ref":"#/definitions/templateParameters"},"variables":{"$ref":"#/definitions/variables"}},"additionalProperties":false},"variables":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"array","items":{"$ref":"#/definitions/variable"}}]},"variable":{"anyOf":[{"type":"object","properties":{"name":{"$ref":"#/definitions/nonEmptyString"},"value":{"$ref":"#/definitions/string"},"readonly":{"$ref":"#/definitions/boolean"}},"additionalProperties":false,"firstProperty":["name"]},{"type":"object","properties":{"group":{"$ref":"#/definitions/nonEmptyString"}},"additionalProperties":false,"firstProperty":["group"]},{"type":"object","properties":{"template":{"$ref":"#/definitions/nonEmptyString"},"parameters":{"$ref":"#/definitions/mapping"}},"additionalProperties":false,"firstProperty":["template"]}]},"stagesTemplate":{"type":"object","properties":{"parameters":{"$ref":"#/definitions/templateParameters"},"stages":{"$ref":"#/definitions/stages"}},"additionalProperties":false},"stages":{"type":"array","items":{"$ref":"#/definitions/stage"}},"stage":{"anyOf":[{"type":"object","properties":{"stage":{"description":"ID of the stage","$ref":"#/definitions/string"},"displayName":{"description":"Human-readable name for the stage","$ref":"#/definitions/string"},"pool":{"description":"Pool where jobs in this stage will run unless otherwise specified","$ref":"#/definitions/pool"},"dependsOn":{"description":"Any stages which must complete before this one","$ref":"#/definitions/jobDependsOn"},"condition":{"description":"Evaluate this condition expression to determine whether to run this stage","$ref":"#/definitions/string"},"variables":{"description":"Stage-specific variables","$ref":"#/definitions/variables"},"jobs":{"description":"Jobs which make up the stage","$ref":"#/definitions/jobs"},"lockBehavior":{"description":"Behavior lock requests from this stage should exhibit in relation to other exclusive lock requests","$ref":"#/definitions/lockBehavior"}},"additionalProperties":false,"firstProperty":["stage"]},{"type":"object","properties":{"template":{"description":"Reference to a template for this stage","$ref":"#/definitions/nonEmptyString"},"parameters":{"description":"Parameters used in a stage template","$ref":"#/definitions/mapping"}},"additionalProperties":false,"firstProperty":["template"]}]},"lockBehavior":{"anyOf":[{"type":"string","pattern":"^sequential$"},{"type":"string","pattern":"^runLatest$"}]},"extendsParameters":{"type":"array","items":{"$ref":"#/definitions/templateParameter"}},"extendsTemplate":{"anyOf":[{"type":"object","properties":{"stages":{"$ref":"#/definitions/stages"},"trigger":{"$ref":"#/definitions/trigger"},"resources":{"$ref":"#/definitions/resources"},"parameters":{"$ref":"#/definitions/extendsParameters"},"variables":{"$ref":"#/definitions/variables"}},"additionalProperties":false},{"type":"object","properties":{"jobs":{"$ref":"#/definitions/jobs"},"trigger":{"$ref":"#/definitions/trigger"},"resources":{"$ref":"#/definitions/resources"},"parameters":{"$ref":"#/definitions/extendsParameters"},"variables":{"$ref":"#/definitions/variables"}},"additionalProperties":false},{"type":"object","properties":{"steps":{"$ref":"#/definitions/steps"},"trigger":{"$ref":"#/definitions/trigger"},"resources":{"$ref":"#/definitions/resources"},"parameters":{"$ref":"#/definitions/extendsParameters"},"variables":{"$ref":"#/definitions/variables"}},"additionalProperties":false},{"type":"object","properties":{"trigger":{"$ref":"#/definitions/trigger"},"resources":{"$ref":"#/definitions/resources"},"parameters":{"$ref":"#/definitions/extendsParameters"},"extends":{"$ref":"#/definitions/extends"}},"additionalProperties":false}]},"extendsTemplateBase":{"type":"object","properties":{"trigger":{"$ref":"#/definitions/trigger"},"resources":{"$ref":"#/definitions/resources"},"parameters":{"$ref":"#/definitions/extendsParameters"},"variables":{"$ref":"#/definitions/variables"}},"additionalProperties":false},"parametersTemplate":{"anyOf":[{"type":"object","properties":{"parameters":{"description":"Step-specific parameters","$ref":"#/definitions/templateParameters"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"}},"additionalProperties":false,"required":["steps"]},{"type":"object","properties":{"parameters":{"description":"Parameters used in a job template","$ref":"#/definitions/templateParameters"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/jobs"}},"additionalProperties":false},{"type":"object","properties":{"parameters":{"$ref":"#/definitions/templateParameters"},"stages":{"$ref":"#/definitions/stages"}},"additionalProperties":false},{"type":"object","properties":{"resources":{"$ref":"#/definitions/resources"},"parameters":{"$ref":"#/definitions/templateParameters"},"extends":{"description":"Extends a template","$ref":"#/definitions/extends"}},"additionalProperties":false,"required":["extends"]}]},"extends":{"type":"object","properties":{"template":{"$ref":"#/definitions/nonEmptyString"},"parameters":{"description":"Parameters used in the extend","$ref":"#/definitions/mapping"}},"additionalProperties":false},"jobsTemplate":{"anyOf":[{"type":"object","properties":{"parameters":{"description":"Parameters used in a job template","$ref":"#/definitions/templateParameters"},"jobs":{"description":"Jobs which make up the pipeline","$ref":"#/definitions/jobs"}},"additionalProperties":false},{"type":"object","properties":{"parameters":{"description":"Parameters used in a phase template","$ref":"#/definitions/templateParameters"},"phases":{"description":"Phases which make up the pipeline","deprecationMessage":"This option is deprecated, use `jobs` instead","doNotSuggest":true,"$ref":"#/definitions/phases"}},"additionalProperties":false}]},"jobs":{"type":"array","items":{"$ref":"#/definitions/job"}},"job":{"anyOf":[{"type":"object","properties":{"job":{"description":"ID of the job","$ref":"#/definitions/referenceName"},"displayName":{"description":"Human-readable name for the job","$ref":"#/definitions/string"},"dependsOn":{"description":"Any jobs which must complete before this one","$ref":"#/definitions/jobDependsOn"},"condition":{"description":"Evaluate this condition expression to determine whether to run this job","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"timeoutInMinutes":{"description":"Time to wait for this job to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"cancelTimeoutInMinutes":{"description":"Time to wait for the job to cancel before forcibly terminating it","$ref":"#/definitions/nonEmptyString"},"variables":{"description":"Job-specific variables","$ref":"#/definitions/variables"},"strategy":{"description":"Execution strategy for this job","$ref":"#/definitions/jobStrategy"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/pool"},"container":{"description":"Container resource name","$ref":"#/definitions/jobContainer"},"services":{"$ref":"#/definitions/jobServices"},"workspace":{"$ref":"#/definitions/jobWorkspace"},"uses":{"description":"Any resources required by this job that are not already referenced","$ref":"#/definitions/explicitResources"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"}},"additionalProperties":false,"firstProperty":["job"]},{"type":"object","properties":{"deployment":{"$ref":"#/definitions/string"},"displayName":{"description":"Human-readable name for the deployment","$ref":"#/definitions/string"},"dependsOn":{"description":"Any jobs which must complete before this one","$ref":"#/definitions/jobDependsOn"},"condition":{"description":"Evaluate this condition expression to determine whether to run this deployment","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"timeoutInMinutes":{"description":"Time to wait for this job to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"cancelTimeoutInMinutes":{"description":"Time to wait for the job to cancel before forcibly terminating it","$ref":"#/definitions/nonEmptyString"},"variables":{"description":"Deployment-specific variables","$ref":"#/definitions/variables"},"pool":{"description":"Pool where this job will run","$ref":"#/definitions/pool"},"environment":{"$ref":"#/definitions/deploymentEnvironment"},"strategy":{"description":"Execution strategy for this deployment","$ref":"#/definitions/deploymentStrategy"},"workspace":{"description":"What to clean up before the job runs","$ref":"#/definitions/jobWorkspace"},"uses":{"description":"Any resources required by this job that are not already referenced","$ref":"#/definitions/explicitResources"},"container":{"description":"Container resource name","$ref":"#/definitions/jobContainer"},"services":{"description":"Container resources to run as a service container","$ref":"#/definitions/jobServices"}},"additionalProperties":false,"firstProperty":["deployment"]},{"type":"object","properties":{"template":{"description":"Reference to a template for this deployment","$ref":"#/definitions/nonEmptyString"},"parameters":{"description":"Parameters used in a deployment template","$ref":"#/definitions/mapping"}},"additionalProperties":false,"firstProperty":["template"]}]},"explicitResources":{"type":"object","properties":{"repositories":{"description":"Repository references","$ref":"#/definitions/sequenceOfNonEmptyString"},"pools":{"description":"Pool references","$ref":"#/definitions/sequenceOfNonEmptyString"}},"additionalProperties":false},"pool":{"description":"Pool details","anyOf":[{"type":"string"},{"type":"object","properties":{"name":{"description":"Name of a pool","$ref":"#/definitions/nonEmptyString"},"demands":{"description":"List of demands (for a private pool)","$ref":"#/definitions/poolDemands"}},"additionalProperties":true}]},"poolDemands":{"anyOf":[{"type":"string"},{"type":"array","items":{"$ref":"#/definitions/nonEmptyString"}}]},"jobContainer":{"anyOf":[{"type":"string"},{"type":"object","properties":{"alias":{"description":"The alias of the container resource","$ref":"#/definitions/string"}},"additionalProperties":false},{"type":"object","properties":{"endpoint":{"description":"ID of the service endpoint connecting to a private container registry","$ref":"#/definitions/string"},"env":{"description":"Variables to map into the container's environment","$ref":"#/definitions/mappingOfStringString"},"image":{"description":"Container image tag","$ref":"#/definitions/string","examples":["ubuntu:16.04","windows:1803"]},"mapDockerSocket":{"description":"Set this flag to false to force the agent not to setup the /var/run/docker.sock volume on container jobs","$ref":"#/definitions/boolean"},"options":{"description":"Options to pass into container host","$ref":"#/definitions/string"},"ports":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"volumes":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"mountReadOnly":{"$ref":"#/definitions/readOnlyMounts"}},"required":["image"]}]},"containerBase":{"type":"object","properties":{"endpoint":{"description":"ID of the service endpoint connecting to a private container registry","$ref":"#/definitions/string"},"env":{"description":"Variables to map into the container's environment","$ref":"#/definitions/mappingOfStringString"},"image":{"description":"Container image tag","$ref":"#/definitions/string","examples":["ubuntu:16.04","windows:1803"]},"mapDockerSocket":{"description":"Set this flag to false to force the agent not to setup the /var/run/docker.sock volume on container jobs","$ref":"#/definitions/boolean"},"options":{"description":"Options to pass into container host","$ref":"#/definitions/string"},"ports":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"volumes":{"$ref":"#/definitions/sequenceOfNonEmptyString"},"mountReadOnly":{"$ref":"#/definitions/readOnlyMounts"}},"additionalProperties":false,"required":["image"]},"readOnlyMounts":{"type":"object","properties":{"work":{"description":"Mount the work directory as readonly","$ref":"#/definitions/boolean"},"externals":{"description":"Mount the externals directory as readonly","$ref":"#/definitions/boolean"},"tools":{"description":"Mount the tools directory as readonly","$ref":"#/definitions/boolean"},"tasks":{"description":"Mount the tasks directory as readonly","$ref":"#/definitions/boolean"}},"additionalProperties":false},"jobServices":{"type":"object","additionalProperties":true},"jobWorkspace":{"type":"object","properties":{"clean":{"description":"Which parts of the workspace should be scorched before fetching","enum":["outputs","resources","all"],"$ref":"#/definitions/string"}},"additionalProperties":false},"jobStrategy":{"anyOf":[{"type":"object","properties":{"matrix":{"$ref":"#/definitions/jobMatrix"},"maxParallel":{"description":"Maximum number of jobs running in parallel","$ref":"#/definitions/nonEmptyString"}},"additionalProperties":false},{"type":"object","properties":{"parallel":{"description":"Run the job this many times","$ref":"#/definitions/nonEmptyString"}},"additionalProperties":false}]},"jobMatrix":{"anyOf":[{"type":"object","additionalProperties":true,"minProperties":1,"patternProperties":{"^[A-Za-z0-9_]+$":{"$ref":"#/definitions/matrixProperties"}}},{"type":"string"}]},"matrixProperties":{"type":"object","description":"Variable-value pair to pass in this matrix instance","additionalProperties":true},"deploymentEnvironment":{"description":"Environment details","anyOf":[{"type":"string"},{"type":"object","properties":{"name":{"description":"Name of environment","$ref":"#/definitions/nonEmptyString"},"resourceName":{"description":"Name of resource","$ref":"#/definitions/nonEmptyString"},"resourceId":{"description":"Id of resource","$ref":"#/definitions/nonEmptyString"},"resourceType":{"description":"Type of environment resource","$ref":"#/definitions/nonEmptyString"},"tags":{"description":"List of tag filters","$ref":"#/definitions/nonEmptyString"}},"additionalProperties":false}]},"deploymentStrategy":{"anyOf":[{"type":"object","properties":{"runOnce":{"description":"RunOnce Deployment strategy","$ref":"#/definitions/runOnceDeploymentStrategy"}},"additionalProperties":false},{"type":"object","properties":{"rolling":{"description":"Rolling Deployment strategy","$ref":"#/definitions/rollingDeploymentStrategy"}},"additionalProperties":false},{"type":"object","properties":{"canary":{"description":"Canary Deployment strategy","$ref":"#/definitions/canaryDeploymentStrategy"}},"additionalProperties":false}]},"preDeployHook":{"type":"object","properties":{"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"},"pool":{"description":"Pool where pre deploy steps will run","$ref":"#/definitions/pool"}},"additionalProperties":false},"deployHook":{"type":"object","properties":{"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"},"pool":{"description":"Pool where deploy steps will run","$ref":"#/definitions/pool"}},"additionalProperties":false},"routeTrafficHook":{"type":"object","properties":{"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"},"pool":{"description":"Pool where route traffic steps will run","$ref":"#/definitions/pool"}},"additionalProperties":false},"postRouteTrafficHook":{"type":"object","properties":{"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"},"pool":{"description":"Pool where post route traffic steps will run","$ref":"#/definitions/pool"}},"additionalProperties":false},"onSuccessOrFailureHook":{"type":"object","properties":{"failure":{"description":"Runs on failure of any step","$ref":"#/definitions/onFailureHook"},"success":{"description":"Runs on success of all of the steps","$ref":"#/definitions/onSuccessHook"}},"additionalProperties":false},"onFailureHook":{"type":"object","properties":{"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"},"pool":{"description":"Pool where post on failure steps will run","$ref":"#/definitions/pool"}},"additionalProperties":false},"onSuccessHook":{"type":"object","properties":{"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"},"pool":{"description":"Pool where on success steps will run","$ref":"#/definitions/pool"}},"additionalProperties":false},"runOnceDeploymentStrategy":{"type":"object","properties":{"preDeploy":{"description":"Pre deploy hook for runOnce deployment strategy","$ref":"#/definitions/preDeployHook"},"deploy":{"description":"Deploy hook for runOnce deployment strategy","$ref":"#/definitions/deployHook"},"routeTraffic":{"description":"Route traffic hook for runOnce deployment strategy","$ref":"#/definitions/routeTrafficHook"},"postRouteTraffic":{"description":"Post route traffic hook for runOnce deployment strategy","$ref":"#/definitions/postRouteTrafficHook"},"on":{"description":"On success or failure hook for runOnce deployment strategy","$ref":"#/definitions/onSuccessOrFailureHook"}},"additionalProperties":false},"rollingDeploymentStrategy":{"type":"object","properties":{"maxParallel":{"description":"Maximum number of jobs running in parallel","$ref":"#/definitions/nonEmptyString"},"preDeploy":{"description":"Pre deploy hook for rolling deployment strategy","$ref":"#/definitions/preDeployHook"},"deploy":{"description":"Deploy hook for rolling deployment strategy","$ref":"#/definitions/deployHook"},"routeTraffic":{"description":"Route traffic hook for rolling deployment strategy","$ref":"#/definitions/routeTrafficHook"},"postRouteTraffic":{"description":"Post route traffic hook for rolling deployment strategy","$ref":"#/definitions/postRouteTrafficHook"},"on":{"description":"On success or failure hook for rolling deployment strategy","$ref":"#/definitions/onSuccessOrFailureHook"}},"additionalProperties":false},"canaryDeploymentStrategy":{"type":"object","properties":{"increments":{"description":"Maximum batch size for deployment","$ref":"#/definitions/canaryDeploymentIncrements"},"preDeploy":{"description":"Pre deploy hook for canary deployment strategy","$ref":"#/definitions/preDeployHook"},"deploy":{"description":"Deploy hook for canary deployment strategy","$ref":"#/definitions/deployHook"},"routeTraffic":{"description":"Route traffic hook for canary deployment strategy","$ref":"#/definitions/routeTrafficHook"},"postRouteTraffic":{"description":"Post route traffic hook for canary deployment strategy","$ref":"#/definitions/postRouteTrafficHook"},"on":{"description":"On success or failure hook for canary deployment strategy","$ref":"#/definitions/onSuccessOrFailureHook"}},"additionalProperties":false},"canaryDeploymentIncrements":{"type":"array","items":{"$ref":"#/definitions/nonEmptyString"}},"phases":{"type":"array","deprecationMessage":"This option is deprecated, use `jobs` instead","items":{"$ref":"#/definitions/phase"}},"phase":{"deprecationMessage":"This option is deprecated, use `job` (inside `jobs`) instead","anyOf":[{"type":"object","properties":{"phase":{"description":"ID of the phase","$ref":"#/definitions/referenceName"},"dependsOn":{"description":"Any phases which must complete before this one","$ref":"#/definitions/jobDependsOn"},"displayName":{"description":"Human-readable name of the phase","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this phase","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"queue":{"description":"Queue where this phase will run","deprecationMessage":"This option is deprecated, use pool instead","doNotSuggest":true,"$ref":"#/definitions/phaseQueueTarget"},"variables":{"description":"Phase-specific variables","$ref":"#/definitions/variables"},"steps":{"description":"A list of steps to run in this phase","$ref":"#/definitions/steps"}},"additionalProperties":false,"firstProperty":["phase"]},{"type":"object","properties":{"phase":{"description":"ID of the phase","$ref":"#/definitions/referenceName"},"dependsOn":{"description":"Any phases which must complete before this one","$ref":"#/definitions/jobDependsOn"},"displayName":{"description":"Human-readable name of the phase","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this phase","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/jobContinueOnError"},"server":{"description":"True if this is an agent-less phase (runs on server)","deprecationMessage":"This option is deprecated, use pool:server instead","doNotSuggest":true,"$ref":"#/definitions/phaseServerTarget"},"variables":{"description":"Phase-specific variables","$ref":"#/definitions/variables"},"steps":{"description":"A list of steps to run in this phase","$ref":"#/definitions/steps"}},"additionalProperties":false,"firstProperty":["phase"]},{"type":"object","properties":{"template":{"description":"Reference to a template for this phase","$ref":"#/definitions/nonEmptyString"},"parameters":{"description":"Parameters used in a phase template","$ref":"#/definitions/mapping"}},"additionalProperties":false,"firstProperty":["template"]}]},"phaseQueueTarget":{"description":"Queue details","deprecationMessage":"This option is deprecated, use `pool` under `jobs` instead","anyOf":[{"type":"string"},{"type":"object","properties":{"cancelTimeoutInMinutes":{"description":"Time to wait for the phase to cancel before forcibly terminating it","$ref":"#/definitions/nonEmptyString"},"container":{"description":"Container resource name","$ref":"#/definitions/nonEmptyString"},"demands":{"description":"List of demands (for a private queue)","$ref":"#/definitions/phaseTargetDemands"},"matrix":{"$ref":"#/definitions/phaseTargetMatrix"},"name":{"description":"Name of a queue","$ref":"#/definitions/string"},"parallel":{"description":"Maximum number of parallel agent executions","$ref":"#/definitions/nonEmptyString"},"timeoutInMinutes":{"description":"Time to wait before cancelling the phase","$ref":"#/definitions/nonEmptyString"},"workspace":{"$ref":"#/definitions/phaseTargetWorkspace"}},"additionalProperties":false}]},"phaseServerTarget":{"anyOf":[{"type":"string"},{"type":"object","properties":{"cancelTimeoutInMinutes":{"description":"Time to wait for the job to cancel before forcibly terminating it","$ref":"#/definitions/nonEmptyString"},"matrix":{"$ref":"#/definitions/phaseTargetMatrix"},"parallel":{"description":"Maximum number of parallel agent executions","$ref":"#/definitions/nonEmptyString"},"timeoutInMinutes":{"description":"Time to wait before cancelling the job","$ref":"#/definitions/nonEmptyString"}},"additionalProperties":false}]},"phaseTargetDemands":{"anyOf":[{"type":"string"},{"type":"array","items":{"$ref":"#/definitions/nonEmptyString"}}]},"phaseTargetWorkspace":{"type":"object","properties":{"clean":{"description":"Scorch the repo before fetching?","enum":["outputs","resources","all"],"$ref":"#/definitions/string"}},"additionalProperties":false},"phaseTargetMatrix":{"description":"List of permutations of variable values to run","anyOf":[{"type":"object","additionalProperties":true},{"type":"string"}],"minProperties":1,"patternProperties":{"^[A-Za-z0-9_]+$":{"$ref":"#/definitions/matrixProperties"}}},"stepsTemplate":{"type":"object","properties":{"parameters":{"description":"Step-specific parameters","$ref":"#/definitions/templateParameters"},"steps":{"description":"A list of steps to run","$ref":"#/definitions/steps"}},"additionalProperties":false},"steps":{"type":"array","items":{"$ref":"#/definitions/step"}},"step":{"anyOf":[{"type":"object","$ref":"#/definitions/task"},{"type":"object","properties":{"script":{"description":"An inline script","$ref":"#/definitions/string"},"failOnStderr":{"description":"Fail the task if output is sent to Stderr?","$ref":"#/definitions/string"},"workingDirectory":{"description":"Start the script with this working directory","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["script"],"required":["script"]},{"type":"object","properties":{"powershell":{"description":"Inline PowerShell or reference to a PowerShell file","$ref":"#/definitions/string"},"errorActionPreference":{"$ref":"#/definitions/string"},"failOnStderr":{"description":"Fail the task if output is sent to Stderr?","$ref":"#/definitions/string"},"ignoreLASTEXITCODE":{"description":"Check the final exit code of the script to determine whether the step succeeded?","$ref":"#/definitions/string"},"workingDirectory":{"description":"Start the script with this working directory","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["powershell"],"required":["powershell"]},{"type":"object","properties":{"pwsh":{"description":"Inline PowerShell or reference to a PowerShell file","$ref":"#/definitions/string"},"errorActionPreference":{"$ref":"#/definitions/string"},"failOnStderr":{"description":"Fail the task if output is sent to Stderr?","$ref":"#/definitions/string"},"ignoreLASTEXITCODE":{"description":"Check the final exit code of the script to determine whether the step succeeded?","$ref":"#/definitions/string"},"workingDirectory":{"description":"Start the script with this working directory","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["pwsh"],"required":["pwsh"]},{"type":"object","properties":{"bash":{"description":"An inline script","$ref":"#/definitions/string"},"failOnStderr":{"description":"Fail the task if output is sent to Stderr?","$ref":"#/definitions/string"},"workingDirectory":{"description":"Start the script with this working directory","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["bash"],"required":["bash"]},{"type":"object","properties":{"checkout":{"description":"Alias of the repository resource to check out or 'none'","$ref":"#/definitions/string"},"clean":{"description":"Scorch the repo before fetching?","enum":["true","false"],"$ref":"#/definitions/string"},"fetchDepth":{"description":"Depth of Git graph to fetch","$ref":"#/definitions/string"},"lfs":{"description":"Fetch Git-LFS objects?","$ref":"#/definitions/string"},"persistCredentials":{"description":"Keep credentials available for later use?","$ref":"#/definitions/string"},"submodules":{"description":"Check out Git submodules?","$ref":"#/definitions/string"},"path":{"description":"Path of the repository to check out","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["checkout"]},{"type":"object","properties":{"download":{"description":"Reference to the pipeline","$ref":"#/definitions/nonEmptyString"},"artifact":{"description":"Name of the artifact to download","$ref":"#/definitions/nonEmptyString"},"patterns":{"description":"Pattern to download files from artifact","$ref":"#/definitions/nonEmptyString"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["download"],"required":["download"]},{"type":"object","properties":{"downloadBuild":{"description":"ID for the build resource","$ref":"#/definitions/nonEmptyString"},"artifact":{"description":"Name of the artifact to download","$ref":"#/definitions/string"},"path":{"description":"Path to download the artifact into","$ref":"#/definitions/string"},"patterns":{"description":"Downloads the files which matches the patterns","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["downloadBuild"]},{"type":"object","properties":{"getPackage":{"description":"ID for the package resource","$ref":"#/definitions/nonEmptyString"},"path":{"description":"Path to download the package into","$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["getPackage"]},{"type":"object","properties":{"upload":{"deprecationMessage":"This option is deprecated, use `publish` instead","doNotSuggest":true,"$ref":"#/definitions/string"},"artifact":{"$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["upload"]},{"type":"object","properties":{"publish":{"$ref":"#/definitions/string"},"artifact":{"$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["publish"]},{"type":"object","properties":{"template":{"description":"Reference to a template for this step","$ref":"#/definitions/nonEmptyString"},"parameters":{"description":"Parameters used in a step template","$ref":"#/definitions/mapping"}},"additionalProperties":false,"firstProperty":["template"]},{"type":"object","properties":{"restoreCache":{"description":"The name of the key","$ref":"#/definitions/nonEmptyString"},"path":{"description":"The folder path to download the cache to. This can be a fully-qualified path or a path relative to the root of the repository. Wildcards are not supported.","$ref":"#/definitions/nonEmptyString"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["restoreCache"],"required":["restoreCache","path"]},{"type":"object","properties":{"saveCache":{"description":"The name of the key","$ref":"#/definitions/nonEmptyString"},"path":{"description":"The folder or file path to publish. This can be a fully-qualified path or a path relative to the root of the repository. Wildcards are not supported.","$ref":"#/definitions/nonEmptyString"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["saveCache"],"required":["saveCache","path"]},{"type":"object","properties":{"reviewApp":{"$ref":"#/definitions/string"},"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false,"firstProperty":["reviewApp"]}]},"stepTarget":{"description":"Step target","anyOf":[{"type":"string"},{"type":"object","properties":{"container":{"description":"Container to target (or 'host' for host machine)","$ref":"#/definitions/nonEmptyString"},"commands":{"description":"Set of allowed logging commands ('any' or 'restricted')","enum":["any","restricted"],"$ref":"#/definitions/string"},"settableVariables":{"description":"Restrictions on which variables that can be set","$ref":"#/definitions/variableRestrictions"}},"additionalProperties":false}]},"variableRestrictions":{"anyOf":[{"type":"string","ignoreCase":"value","pattern":"^none$"},{"type":"array","items":{"$ref":"#/definitions/nonEmptyString"}}]},"jobDecoratorSteps":{"type":"object","properties":{"steps":{"description":"A list of steps to run in this job","$ref":"#/definitions/tasks"}},"additionalProperties":false},"tasks":{"type":"array","items":{"$ref":"#/definitions/task"}},"taskBase":{"type":"object","properties":{"condition":{"description":"Evaluate this condition expression to determine whether to run this task","$ref":"#/definitions/string"},"continueOnError":{"description":"Continue running even on failure?","$ref":"#/definitions/boolean"},"displayName":{"description":"Human-readable name for the task","$ref":"#/definitions/string"},"target":{"description":"Environment in which to run this task","$ref":"#/definitions/stepTarget"},"enabled":{"description":"Run this task when the job runs?","$ref":"#/definitions/boolean"},"env":{"description":"Variables to map into the process's environment","$ref":"#/definitions/mappingOfStringString"},"name":{"description":"ID of the step","$ref":"#/definitions/referenceName"},"timeoutInMinutes":{"description":"Time to wait for this task to complete before the server kills it","$ref":"#/definitions/nonEmptyString"},"retryCountOnTaskFailure":{"description":"Number of retries if the task fails","$ref":"#/definitions/string"}},"additionalProperties":false},"jobContinueOnError":{"type":"string"},"jobDependsOn":{"anyOf":[{"type":"string"},{"type":"array","items":{"$ref":"#/definitions/string"}}]},"referenceName":{"type":"string","pattern":"^[-_A-Za-z0-9]*$"},"boolean":{"anyOf":[{"type":"string","ignoreCase":"value","pattern":"^true$"},{"type":"string","ignoreCase":"value","pattern":"^y$"},{"type":"string","ignoreCase":"value","pattern":"^yes$"},{"type":"string","ignoreCase":"value","pattern":"^on$"},{"type":"string","ignoreCase":"value","pattern":"^false$"},{"type":"string","ignoreCase":"value","pattern":"^n$"},{"type":"string","ignoreCase":"value","pattern":"^no$"},{"type":"string","ignoreCase":"value","pattern":"^off$"}]},"string_allowExpressions":{"type":"string"},"nonEmptyString":{"type":"string"},"sequenceOfNonEmptyString":{"type":"array","items":{"$ref":"#/definitions/nonEmptyString"}},"mappingOfStringString":{"type":"object","additionalProperties":true},"any_allowExpressions":{"anyOf":[{"type":"string"},{"type":"array","items":{"$ref":"#/definitions/any"}},{"type":"object","additionalProperties":true}]},"task":{"type":"object","properties":{"task":{"anyOf":[{"description":"A variant of the Codesign Validation build task that auto-runs on Production builds.","doNotSuggest":false,"ignoreCase":"value","enum":["CodeSignValidationInjected@1"]},{"description":"Run a PowerShell script on Linux, macOS, or Windows","doNotSuggest":false,"ignoreCase":"value","enum":["PowerShell@2"]},{"description":"Run a PowerShell script","doNotSuggest":false,"ignoreCase":"value","enum":["PowerShell@1"]},{"description":"Run a PowerShell script within an Azure environment","doNotSuggest":false,"ignoreCase":"value","enum":["AzurePowerShell@5"]},{"description":"Run a PowerShell script within an Azure environment","doNotSuggest":false,"ignoreCase":"value","enum":["AzurePowerShell@2"]},{"description":"Run a PowerShell script within an Azure environment","doNotSuggest":false,"ignoreCase":"value","enum":["AzurePowerShell@3"]},{"description":"Run a PowerShell script within an Azure environment","doNotSuggest":false,"ignoreCase":"value","enum":["AzurePowerShell@4"]},{"description":"Run a PowerShell script within an Azure environment","doNotSuggest":false,"ignoreCase":"value","enum":["AzurePowerShell@1"]},{"description":"Run scripts and make changes to a MySQL Database","doNotSuggest":false,"ignoreCase":"value","enum":["MysqlDeploymentOnMachineGroup@1"]},{"description":"Installs and configures the MicroBuild Prefast plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildPrefastPlugin@2"]},{"description":"Authentication task for the pip client used for installing Python distributions","doNotSuggest":false,"ignoreCase":"value","enum":["PipAuthenticate@1"]},{"description":"Authentication task for the pip client used for installing Python distributions","doNotSuggest":false,"ignoreCase":"value","enum":["PipAuthenticate@0"]},{"description":"Build, test, and deploy with Apache Maven","doNotSuggest":false,"ignoreCase":"value","enum":["Maven@2"]},{"description":"Build, test, and deploy with Apache Maven","doNotSuggest":false,"ignoreCase":"value","enum":["Maven@3"]},{"description":"Build with Apache Maven","doNotSuggest":false,"ignoreCase":"value","enum":["Maven@1"]},{"description":"Zip Files and Folder","doNotSuggest":false,"ignoreCase":"value","enum":["zip@0"]},{"description":"Publish Symbols to Artifact Services - Internal Preview","doNotSuggest":false,"ignoreCase":"value","enum":["artifactSymbolTask@0"]},{"description":"Run a powershell script to rollback deployments. Task execution context is available in the powershell context for implementing conditional rollback","doNotSuggest":false,"ignoreCase":"value","enum":["Rollback@1"]},{"description":"Build, test, package, or publish a dotnet application, or run a custom dotnet command","doNotSuggest":false,"ignoreCase":"value","enum":["DotNetCoreCLI@2"]},{"description":"Build, test and publish using dotnet core command-line.","deprecationMessage":"DotNetCoreCLI is deprecated - Build, test and publish using dotnet core command-line.","doNotSuggest":true,"ignoreCase":"value","enum":["DotNetCoreCLI@0"]},{"description":"Build, test and publish using dotnet core command-line.","doNotSuggest":false,"ignoreCase":"value","enum":["DotNetCoreCLI@1"]},{"description":"Tokenizes a file.","doNotSuggest":false,"ignoreCase":"value","enum":["JSONTokenizer@1"]},{"description":"Send start job telemetry for .NET Core builds","doNotSuggest":false,"ignoreCase":"value","enum":["SendStartTelemetry@0"]},{"description":"This task is deprecated. Use 'NuGet' instead.","deprecationMessage":"XamarinComponentRestore is deprecated - This task is deprecated. Use 'NuGet' instead.","doNotSuggest":true,"ignoreCase":"value","enum":["XamarinComponentRestore@0"]},{"description":"ReportGenerator converts coverage reports generated by coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov or lcov into human readable reports in various formats.","doNotSuggest":false,"ignoreCase":"value","enum":["reportgenerator@5"]},{"description":"ReportGenerator converts coverage reports generated by coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov or lcov into human readable reports in various formats.","doNotSuggest":false,"ignoreCase":"value","enum":["reportgenerator@4"]},{"description":"Update Azure App Service using Web Deploy / Kudu REST APIs","doNotSuggest":false,"ignoreCase":"value","enum":["AzureRmWebAppDeployment@2"]},{"description":"Deploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby","doNotSuggest":false,"ignoreCase":"value","enum":["AzureRmWebAppDeployment@3"]},{"description":"Deploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby","doNotSuggest":false,"ignoreCase":"value","enum":["AzureRmWebAppDeployment@4"]},{"description":"Execute PowerShell scripts on remote machine(s)","doNotSuggest":false,"ignoreCase":"value","enum":["PowerShellOnTargetMachines@1"]},{"description":"Execute PowerShell scripts on remote machines using PSSession and Invoke-Command for remoting","doNotSuggest":false,"ignoreCase":"value","enum":["PowerShellOnTargetMachines@3"]},{"description":"Execute PowerShell scripts on remote machine(s)","doNotSuggest":false,"ignoreCase":"value","enum":["PowerShellOnTargetMachines@2"]},{"description":"Publish Cobertura or JaCoCo code coverage results from a build","doNotSuggest":false,"ignoreCase":"value","enum":["PublishCodeCoverageResults@1"]},{"description":"Deprecated: This task and it’s companion task (Visual Studio Test Agent Deployment) are deprecated. Use the 'Visual Studio Test' task instead. The VSTest task can run unit as well as functional tests. Run tests on one or more agents using the multi-agent job setting. Use the 'Visual Studio Test Platform' task to run tests without needing Visual Studio on the agent. VSTest task also brings new capabilities such as automatically rerunning failed tests.","deprecationMessage":"RunVisualStudioTestsusingTestAgent is deprecated - Deprecated: This task and it’s companion task (Visual Studio Test Agent Deployment) are deprecated. Use the 'Visual Studio Test' task instead. The VSTest task can run unit as well as functional tests. Run tests on one or more agents using the multi-agent job setting. Use the 'Visual Studio Test Platform' task to run tests without needing Visual Studio on the agent. VSTest task also brings new capabilities such as automatically rerunning failed tests.","doNotSuggest":true,"ignoreCase":"value","enum":["RunVisualStudioTestsusingTestAgent@1"]},{"description":"Execute bash script","doNotSuggest":false,"ignoreCase":"value","enum":["Shellpp@0"]},{"description":"Pause deployment and wait for manual intervention","doNotSuggest":false,"ignoreCase":"value","enum":["ManualIntervention@8"]},{"description":"Install an Apple provisioning profile required to build on a macOS agent machine","doNotSuggest":false,"ignoreCase":"value","enum":["InstallAppleProvisioningProfile@1"]},{"description":"Install an Apple provisioning profile required to build on a macOS agent","doNotSuggest":false,"ignoreCase":"value","enum":["InstallAppleProvisioningProfile@0"]},{"description":"[DEPRECATED] Finish the analysis and upload the results to SonarQube","deprecationMessage":"SonarQubePostTest is deprecated - [DEPRECATED] Finish the analysis and upload the results to SonarQube","doNotSuggest":true,"ignoreCase":"value","enum":["SonarQubePostTest@1"]},{"description":"Indexes repository and stores navigation information","doNotSuggest":false,"ignoreCase":"value","enum":["RichCodeNavIndexer@0"]},{"description":"Creates a PR for a Payload Insertion into VS","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildInsertVsPayload@3"]},{"description":"Creates a PR for a Payload Insertion into VS","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildInsertVsPayload@4"]},{"description":"Create and upload an sdist or wheel to a PyPI-compatible index using Twine","doNotSuggest":false,"ignoreCase":"value","enum":["PyPIPublisher@0"]},{"description":"Run scripts with Knife commands on your Chef workstation","deprecationMessage":"ChefKnife is deprecated - Run scripts with Knife commands on your Chef workstation","doNotSuggest":true,"ignoreCase":"value","enum":["ChefKnife@1"]},{"description":"Find in cache or download a specific version of Go and add it to the PATH","doNotSuggest":false,"ignoreCase":"value","enum":["GoTool@0"]},{"description":"Routes traffic of a Web App to an App Slot by the specified percentage","doNotSuggest":false,"ignoreCase":"value","enum":["azureWebAppRouteTraffic@0"]},{"description":"Generate an .ipa file from Xcode build output using xcrun (Xcode 7 or below)","deprecationMessage":"XcodePackageiOS is deprecated - Generate an .ipa file from Xcode build output using xcrun (Xcode 7 or below)","doNotSuggest":true,"ignoreCase":"value","enum":["XcodePackageiOS@0"]},{"description":"Get, build, or test a Go application, or run a custom Go command","doNotSuggest":false,"ignoreCase":"value","enum":["Go@0"]},{"description":"Replaces ____ and/or XPath for XML documents with User Defined variables or configuration json document","doNotSuggest":false,"ignoreCase":"value","enum":["Tokenizer@2"]},{"description":"Publish Pipeline Metadata to Evidence store","doNotSuggest":false,"ignoreCase":"value","enum":["PublishPipelineMetadata@0"]},{"description":"Build, tag, push, or run Docker images, or run a Docker command","doNotSuggest":false,"ignoreCase":"value","enum":["Docker@1"]},{"description":"Build or push Docker images, login or logout, start or stop containers, or run a Docker command","doNotSuggest":false,"ignoreCase":"value","enum":["Docker@2"]},{"description":"Build, tag, push, or run Docker images, or run a Docker command","doNotSuggest":false,"ignoreCase":"value","enum":["Docker@0"]},{"description":"Publish to Artifact Services Drop - Internal Preview","doNotSuggest":false,"ignoreCase":"value","enum":["artifactDropTask@0"]},{"description":"Queue a job on a Jenkins server","doNotSuggest":false,"ignoreCase":"value","enum":["JenkinsQueueJob@2"]},{"description":"Queue a job on a Jenkins server","doNotSuggest":false,"ignoreCase":"value","enum":["JenkinsQueueJob@1"]},{"description":"Upload files using FTP","doNotSuggest":false,"ignoreCase":"value","enum":["FtpUpload@1"]},{"description":"Upload files using FTP","doNotSuggest":false,"ignoreCase":"value","enum":["FtpUpload@2"]},{"description":"Copy files to remote Windows machines","doNotSuggest":false,"ignoreCase":"value","enum":["WindowsMachineFileCopy@1"]},{"description":"Copy files to remote Windows machines","doNotSuggest":false,"ignoreCase":"value","enum":["WindowsMachineFileCopy@2"]},{"description":"Send an email to 1 or more addresses via the SMTP server you provide","doNotSuggest":false,"ignoreCase":"value","enum":["SendEmail@1"]},{"description":"[Deprecated] Use Gradle","deprecationMessage":"AndroidBuild is deprecated - [Deprecated] Use Gradle","doNotSuggest":true,"ignoreCase":"value","enum":["AndroidBuild@1"]},{"description":"Authenticate for uploading Python distributions using twine. Add '-r FeedName/EndpointName --config-file $(PYPIRC_PATH)' to your twine upload command. For feeds present in this organization, use the feed name as the repository (-r). Otherwise, use the endpoint name defined in the service connection.","doNotSuggest":false,"ignoreCase":"value","enum":["TwineAuthenticate@1"]},{"description":"Authenticate for uploading Python distributions using twine. Add '-r FeedName/EndpointName --config-file $(PYPIRC_PATH)' to your twine upload command. For feeds present in this organization, use the feed name as the repository (-r). Otherwise, use the endpoint name defined in the service connection.","doNotSuggest":false,"ignoreCase":"value","enum":["TwineAuthenticate@0"]},{"description":"Deploy a website or web application using Web Deploy","doNotSuggest":false,"ignoreCase":"value","enum":["IISWebAppDeploymentOnMachineGroup@0"]},{"description":"Run a Python file or inline script","doNotSuggest":false,"ignoreCase":"value","enum":["PythonScript@0"]},{"description":"Install Helm on an agent machine","doNotSuggest":false,"ignoreCase":"value","enum":["HelmInstaller@1"]},{"description":"Install Helm and Kubernetes on an agent machine","doNotSuggest":false,"ignoreCase":"value","enum":["HelmInstaller@0"]},{"description":"[Deprecated] Upgrade to free version of Xamarin: https://store.xamarin.com","deprecationMessage":"XamarinLicense is deprecated - [Deprecated] Upgrade to free version of Xamarin: https://store.xamarin.com","doNotSuggest":true,"ignoreCase":"value","enum":["XamarinLicense@1"]},{"description":"Configure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Requires NuGet >= 4.8.5385, dotnet >= 2.1.400, or MSBuild >= 15.8.166.59604","doNotSuggest":false,"ignoreCase":"value","enum":["NuGetAuthenticate@0"]},{"description":"Include with your build to enable automatic Component Governance detection.","doNotSuggest":false,"ignoreCase":"value","enum":["ComponentGovernanceComponentDetection@0"]},{"description":"Restore your nuget packages using dotnet CLI","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadGitHubNugetPackage@1"]},{"description":"Provides credentials for Azure Artifacts feeds and external maven repositories","doNotSuggest":false,"ignoreCase":"value","enum":["MavenAuthenticate@0"]},{"description":"Use this task under deploy phase provider to create a resource dynamically","doNotSuggest":false,"ignoreCase":"value","enum":["ReviewApp@0"]},{"description":"Acquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME","doNotSuggest":false,"ignoreCase":"value","enum":["JavaToolInstaller@0"]},{"description":"Deploy to Chef environments by editing environment attributes","deprecationMessage":"Chef is deprecated - Deploy to Chef environments by editing environment attributes","doNotSuggest":true,"ignoreCase":"value","enum":["Chef@1"]},{"description":"Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFunctionApp@1"]},{"description":"Don't use this task if you're also using the npm task. Provides npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm task runners like gulp and Grunt to authenticate with private registries.","doNotSuggest":false,"ignoreCase":"value","enum":["npmAuthenticate@0"]},{"description":"Build with MSBuild","doNotSuggest":false,"ignoreCase":"value","enum":["MSBuild@1"]},{"description":"Adds a coverage trend summary section to the build report.","doNotSuggest":false,"ignoreCase":"value","enum":["CoverageGate@1"]},{"description":"Build a machine image using Packer, which may be used for Azure Virtual machine scale set deployment","doNotSuggest":false,"ignoreCase":"value","enum":["PackerBuild@1"]},{"description":"Build a machine image using Packer, which may be used for Azure Virtual machine scale set deployment","doNotSuggest":false,"ignoreCase":"value","enum":["PackerBuild@0"]},{"description":"Installs and configures the MicroBuild signing plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSigningPlugin@4"]},{"description":"Installs and configures the MicroBuild signing plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSigningPlugin@1"]},{"description":"[Test-Xamarin-0.999.10 (all-lock)] Installs and configures the MicroBuild signing plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSigningPlugin@0"]},{"description":"Installs and configures the MicroBuild signing plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSigningPlugin@3"]},{"description":"Installs and configures the MicroBuild signing plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSigningPlugin@2"]},{"description":"Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","deprecationMessage":"NuGetPackager is deprecated - Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","doNotSuggest":true,"ignoreCase":"value","enum":["NuGetPackager@0"]},{"description":"Automatically updates the versions of a packaged Service Fabric application.","doNotSuggest":false,"ignoreCase":"value","enum":["ServiceFabricUpdateAppVersions@1"]},{"description":"Automatically update portions of application and service manifests in a packaged Azure Service Fabric application","doNotSuggest":false,"ignoreCase":"value","enum":["ServiceFabricUpdateManifests@2"]},{"description":"Install a specified version of Duffle for installing and managing CNAB bundles","doNotSuggest":false,"ignoreCase":"value","enum":["DuffleInstaller@0"]},{"description":"Observe the configured Azure Monitor rules for active alerts","doNotSuggest":false,"ignoreCase":"value","enum":["AzureMonitor@1"]},{"description":"Observe the configured classic Azure Monitor rules for active alerts","deprecationMessage":"AzureMonitor is deprecated - Observe the configured classic Azure Monitor rules for active alerts","doNotSuggest":true,"ignoreCase":"value","enum":["AzureMonitor@0"]},{"description":"Task to generate runsettings and ADO Drop Urls as artifacts.","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildGenerateTestArtifacts@1"]},{"description":"Connect or disconnect an Azure virtual machine's network interface to a Load Balancer's back end address pool","doNotSuggest":false,"ignoreCase":"value","enum":["AzureNLBManagement@1"]},{"description":"Run an Apache JMeter load test in the cloud","deprecationMessage":"ApacheJMeterLoadTest is deprecated - Run an Apache JMeter load test in the cloud","doNotSuggest":true,"ignoreCase":"value","enum":["ApacheJMeterLoadTest@1"]},{"description":"Build, push or run multi-container Docker applications. Task can be used with Docker or Azure Container registry.","doNotSuggest":false,"ignoreCase":"value","enum":["DockerCompose@0"]},{"description":"Configure alerts on available metrics for an Azure resource (Deprecated)","doNotSuggest":false,"ignoreCase":"value","enum":["AzureMonitorAlerts@0"]},{"description":"[Deprecated] Test mobile apps with Xamarin Test Cloud using Xamarin.UITest. Instead, use the 'App Center test' task.","deprecationMessage":"XamarinTestCloud is deprecated - [Deprecated] Test mobile apps with Xamarin Test Cloud using Xamarin.UITest. Instead, use the 'App Center test' task.","doNotSuggest":true,"ignoreCase":"value","enum":["XamarinTestCloud@1"]},{"description":"Deploy an Azure Service Fabric application to a cluster","doNotSuggest":false,"ignoreCase":"value","enum":["ServiceFabricDeploy@1"]},{"description":"Uploads MicroBuild telemetry. This step should be added at the end of every definition using MicroBuild tasks.","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildCleanup@1"]},{"description":"Installs and configures the MicroBuild OptProf plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildOptProfPlugin@3"]},{"description":"Installs and configures the MicroBuild OptProf plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildOptProfPlugin@2"]},{"description":"Installs and configures the MicroBuild OptProf plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildOptProfPlugin@6"]},{"description":"Installs and configures the MicroBuild OptProf plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildOptProfPlugin@4"]},{"description":"Installs and configures the MicroBuild OptProf plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildOptProfPlugin@5"]},{"description":"Installs and configures the MicroBuild OptProf plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildOptProfPlugin@1"]},{"description":"Build an Xcode workspace on Mac OS","doNotSuggest":false,"ignoreCase":"value","enum":["Xcode@2"]},{"description":"Build, test, or archive an Xcode workspace on macOS. Optionally package an app.","doNotSuggest":false,"ignoreCase":"value","enum":["Xcode@5"]},{"description":"Build an Xcode workspace on macOS","doNotSuggest":false,"ignoreCase":"value","enum":["Xcode@3"]},{"description":"Build, test, or archive an Xcode workspace on macOS. Optionally package an app.","doNotSuggest":false,"ignoreCase":"value","enum":["Xcode@4"]},{"description":"Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","deprecationMessage":"NuGetPublisher is deprecated - Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","doNotSuggest":true,"ignoreCase":"value","enum":["NuGetPublisher@0"]},{"description":"Updates the version number of the assemblies to match the build number","doNotSuggest":false,"ignoreCase":"value","enum":["VersionAssemblies@2"]},{"description":"Execute a work item query and check the number of items returned","doNotSuggest":false,"ignoreCase":"value","enum":["queryWorkItems@0"]},{"description":"Installs and configures the MicroBuild IBCMerge plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildIBCMergePlugin@1"]},{"description":"Installs and configures the MicroBuild IBCMerge plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildIBCMergePlugin@0"]},{"description":"Deploy containers to Azure App Service","doNotSuggest":false,"ignoreCase":"value","enum":["AzureWebAppContainer@1"]},{"description":"Deploy a SQL Server database using DACPAC or SQL scripts","doNotSuggest":false,"ignoreCase":"value","enum":["SqlDacpacDeploymentOnMachineGroup@0"]},{"description":"Cache files between runs","doNotSuggest":false,"ignoreCase":"value","enum":["CacheBeta@1"]},{"description":"Cache files between runs","doNotSuggest":false,"ignoreCase":"value","enum":["Cache@2"]},{"description":"Cache files between runs","doNotSuggest":false,"ignoreCase":"value","enum":["CacheBeta@0"]},{"description":"Installs and configures the MicroBuild FXCop plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildFXCopPlugin@2"]},{"description":"Build with the CMake cross-platform build system","doNotSuggest":false,"ignoreCase":"value","enum":["CMake@1"]},{"description":"Test app packages with Visual Studio App Center","doNotSuggest":false,"ignoreCase":"value","enum":["AppCenterTest@1"]},{"description":"Test mobile app packages with Visual Studio Mobile Center.","doNotSuggest":false,"ignoreCase":"value","enum":["VSMobileCenterTest@0"]},{"description":"Finds or Downloads and caches specified version spec of EsrpClient CLI and adds it to the PATH. In addition it will set esrpclient.toolpath and esrpclient.toolname task output variables which you can use in subsequent tasks or build scripts","doNotSuggest":false,"ignoreCase":"value","enum":["EsrpClientTool@1"]},{"description":"Download a secure file to the agent machine","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadSecureFile@1"]},{"description":"Use the specified version of Ruby from the tool cache, optionally adding it to the PATH","doNotSuggest":false,"ignoreCase":"value","enum":["UseRubyVersion@0"]},{"description":"Run the Grunt JavaScript task runner","doNotSuggest":false,"ignoreCase":"value","enum":["Grunt@0"]},{"description":"Deploy an Azure SQL Database using DACPAC or run scripts using SQLCMD","doNotSuggest":false,"ignoreCase":"value","enum":["SqlAzureDacpacDeployment@1"]},{"description":"Uses container-structure-test (https://github.com/GoogleContainerTools/container-structure-test) to validate the structure of an image based on four categories of tests - command tests, file existence tests, file content tests and metadata tests","doNotSuggest":false,"ignoreCase":"value","enum":["ContainerStructureTest@0"]},{"description":"Deploy using MSDeploy, then create/update websites and app pools","deprecationMessage":"IISWebAppDeployment is deprecated - Deploy using MSDeploy, then create/update websites and app pools","doNotSuggest":true,"ignoreCase":"value","enum":["IISWebAppDeployment@1"]},{"description":"Run a load test in the cloud with Azure Pipelines","deprecationMessage":"CloudLoadTest is deprecated - Run a load test in the cloud with Azure Pipelines","doNotSuggest":true,"ignoreCase":"value","enum":["CloudLoadTest@1"]},{"description":"Validates that pipelines use secure and compliant Azure DevOps pools","doNotSuggest":false,"ignoreCase":"value","enum":["1ESHostedPoolValidation@1"]},{"description":"Download from Artifact Services Drop - Internal Preview","doNotSuggest":false,"ignoreCase":"value","enum":["artifactDropDownloadTask@0"]},{"description":"Install Kubectl on agent machine","doNotSuggest":false,"ignoreCase":"value","enum":["KubectlInstaller@0"]},{"description":"Run a command line script using Bash on Linux and macOS and cmd.exe on Windows","doNotSuggest":false,"ignoreCase":"value","enum":["CmdLine@2"]},{"description":"Run a command line with arguments","doNotSuggest":false,"ignoreCase":"value","enum":["CmdLine@1"]},{"description":"Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","deprecationMessage":"NuGet is deprecated - Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","doNotSuggest":true,"ignoreCase":"value","enum":["NuGet@0"]},{"description":"Container Build Task","doNotSuggest":false,"ignoreCase":"value","enum":["ContainerBuild@0"]},{"description":"Send end job telemetry for .NET Core builds","doNotSuggest":false,"ignoreCase":"value","enum":["SendEndTelemetry@0"]},{"description":"Restores NuGet packages in preparation for a Visual Studio Build step.","doNotSuggest":false,"ignoreCase":"value","enum":["NuGetRestore@1"]},{"description":"Restore, pack, or push NuGet packages, or run a NuGet command. Supports NuGet.org and authenticated feeds like Azure Artifacts and MyGet. Uses NuGet.exe and works with .NET Framework apps. For .NET Core and .NET Standard apps, use the .NET Core task.","doNotSuggest":false,"ignoreCase":"value","enum":["NuGetCommand@2"]},{"description":"Installs or restores missing NuGet packages. Use NuGetAuthenticate@0 task for latest capabilities.","doNotSuggest":false,"ignoreCase":"value","enum":["NuGetInstaller@0"]},{"description":"Invokes the VS Tools for Docker script with optional overrides","deprecationMessage":"DockerPublish is deprecated - Invokes the VS Tools for Docker script with optional overrides","doNotSuggest":true,"ignoreCase":"value","enum":["DockerPublish@0"]},{"description":"Delay further execution of a workflow by a fixed time","doNotSuggest":false,"ignoreCase":"value","enum":["Delay@1"]},{"description":"Submits Mac files to PRSS for signing","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSignMacFiles@1"]},{"description":"Submits Mac files to PRSS for signing","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSignMacFiles@0"]},{"description":"Build an iOS app with Xamarin on macOS","doNotSuggest":false,"ignoreCase":"value","enum":["XamariniOS@2"]},{"description":"Build an iOS app with Xamarin on macOS","doNotSuggest":false,"ignoreCase":"value","enum":["XamariniOS@1"]},{"description":"Analyze repository and generate data files to enable semantic code browsing.","doNotSuggest":false,"ignoreCase":"value","enum":["Ref12Analyze@0"]},{"description":"Publish test results to Azure Pipelines","doNotSuggest":false,"ignoreCase":"value","enum":["PublishTestResults@1"]},{"description":"Publish test results to Azure Pipelines","doNotSuggest":false,"ignoreCase":"value","enum":["PublishTestResults@2"]},{"description":"Copy files to Azure Blob Storage or virtual machines","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFileCopy@1"]},{"description":"Copy files to Azure Blob Storage or virtual machines","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFileCopy@2"]},{"description":"Copy files to Azure Blob Storage or virtual machines","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFileCopy@3"]},{"description":"Copy files to Azure Blob Storage or virtual machines","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFileCopy@4"]},{"description":"Installs and configures the MicroBuild swix plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSwixPlugin@3"]},{"description":"Installs and configures the MicroBuild swix plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSwixPlugin@4"]},{"description":"Installs and configures the MicroBuild swix plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSwixPlugin@2"]},{"description":"Installs and configures the MicroBuild swix plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildSwixPlugin@1"]},{"description":"Index your source code and publish symbols to a file share or Azure Artifacts symbol server","doNotSuggest":false,"ignoreCase":"value","enum":["PublishSymbols@2"]},{"description":"Index your source code and publish symbols to a file share","doNotSuggest":false,"ignoreCase":"value","enum":["PublishSymbols@1"]},{"description":"Copy files or build artifacts to a remote machine over SSH","doNotSuggest":false,"ignoreCase":"value","enum":["CopyFilesOverSSH@0"]},{"description":"Build using a Gradle wrapper script","doNotSuggest":false,"ignoreCase":"value","enum":["Gradle@2"]},{"description":"Build using a Gradle wrapper script","doNotSuggest":false,"ignoreCase":"value","enum":["Gradle@3"]},{"description":"Build using a Gradle wrapper script","doNotSuggest":false,"ignoreCase":"value","enum":["Gradle@1"]},{"description":"Replaces tokens in a file using RegEx. Values come from any variable defined in the current Environment.","doNotSuggest":false,"ignoreCase":"value","enum":["ReplaceTokens@1"]},{"description":"Installs and configures the MicroBuild localization plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildLocalizationPlugin@1"]},{"description":"Installs and configures the MicroBuild localization plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildLocalizationPlugin@4"]},{"description":"Installs and configures the MicroBuild localization plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildLocalizationPlugin@3"]},{"description":"Installs and configures the MicroBuild localization plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildLocalizationPlugin@2"]},{"description":"Microsoft Internal tool for Malware Scanning of files using ESRP Service","doNotSuggest":false,"ignoreCase":"value","enum":["EsrpMalwareScanning@1"]},{"description":"Distribute app builds to testers and users via Visual Studio App Center","doNotSuggest":false,"ignoreCase":"value","enum":["AppCenterDistribute@1"]},{"description":"Distribute app builds to testers and users via Visual Studio App Center","doNotSuggest":false,"ignoreCase":"value","enum":["AppCenterDistribute@2"]},{"description":"Distribute app builds to testers and users via Visual Studio App Center","doNotSuggest":false,"ignoreCase":"value","enum":["AppCenterDistribute@3"]},{"description":"Distribute app builds to testers and users via App Center","doNotSuggest":false,"ignoreCase":"value","enum":["AppCenterDistribute@0"]},{"description":"Acquires a specific version of NuGet from the internet or the tools cache and adds it to the PATH. Use this task to change the version of NuGet used in the NuGet tasks.","doNotSuggest":false,"ignoreCase":"value","enum":["NuGetToolInstaller@1"]},{"description":"Acquires a specific version of NuGet from the internet or the tools cache and adds it to the PATH. Use this task to change the version of NuGet used in the NuGet tasks.","doNotSuggest":false,"ignoreCase":"value","enum":["NuGetToolInstaller@0"]},{"description":"Invokes web deploy to Azure website, substituting any Environment variables into the SetParameters.xml file","deprecationMessage":"AzureWebDeploy is deprecated - Invokes web deploy to Azure website, substituting any Environment variables into the SetParameters.xml file","doNotSuggest":true,"ignoreCase":"value","enum":["AzureWebDeploy@0"]},{"description":"Generic LSBuild wrapper which streamlines the localization build process and optionally checks-in resulting localized files to a repo","doNotSuggest":false,"ignoreCase":"value","enum":["OneLocBuild@2"]},{"description":"Download artifacts produced by a Jenkins job","doNotSuggest":false,"ignoreCase":"value","enum":["JenkinsDownloadArtifacts@1"]},{"description":"Update a function app with a Docker container","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFunctionAppContainer@1"]},{"description":"Decrypt a file using OpenSSL","doNotSuggest":false,"ignoreCase":"value","enum":["DecryptFile@1"]},{"description":"Deploy, configure, update a Kubernetes cluster in Azure Container Service by running helm commands","doNotSuggest":false,"ignoreCase":"value","enum":["HelmDeploy@0"]},{"description":"Install an Apple certificate required to build on a macOS agent machine","doNotSuggest":false,"ignoreCase":"value","enum":["InstallAppleCertificate@2"]},{"description":"Install an Apple certificate required to build on a macOS agent","doNotSuggest":false,"ignoreCase":"value","enum":["InstallAppleCertificate@1"]},{"description":"Install an Apple certificate required to build on a macOS agent","doNotSuggest":false,"ignoreCase":"value","enum":["InstallAppleCertificate@0"]},{"description":"Microsoft Internal tool for Code Signing files using ESRP Service","doNotSuggest":false,"ignoreCase":"value","enum":["EsrpCodeSigning@1"]},{"description":"Invoke an Azure Function","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFunction@1"]},{"description":"Invoke Azure function as a part of your process.","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFunction@0"]},{"description":"A task to scan for vulnerabilities in nuget files.","doNotSuggest":false,"ignoreCase":"value","enum":["nuget-security-analysis@0"]},{"description":"Provides a report on database model changes since the last build","doNotSuggest":false,"ignoreCase":"value","enum":["DacPacReport@1"]},{"description":"Downloads a GitHub Release from a repository","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadGitHubRelease@0"]},{"description":"Run shell commands or a script on a remote machine using SSH","doNotSuggest":false,"ignoreCase":"value","enum":["SSH@0"]},{"description":"Publish (upload) a file or directory as a named artifact for the current run","doNotSuggest":false,"ignoreCase":"value","enum":["PublishPipelineArtifact@1"]},{"description":"Publish a local directory or file as a named artifact for the current pipeline","deprecationMessage":"PublishPipelineArtifact is deprecated - Publish a local directory or file as a named artifact for the current pipeline","doNotSuggest":true,"ignoreCase":"value","enum":["PublishPipelineArtifact@0"]},{"description":"[DEPRECATED] Fetch the Quality Profile from SonarQube to configure the analysis","deprecationMessage":"SonarQubePreBuild is deprecated - [DEPRECATED] Fetch the Quality Profile from SonarQube to configure the analysis","doNotSuggest":true,"ignoreCase":"value","enum":["SonarQubePreBuild@1"]},{"description":"Builds a VS Bootstrapper including the changes of the manifests from one or more components","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildBuildVSBootstrapper@2"]},{"description":"Builds a VS Bootstrapper including the changes of the manifests from one or more components","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildBuildVSBootstrapper@1"]},{"description":"Download artifacts from a file share, like \\\\share\\drop","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadFileshareArtifacts@1"]},{"description":"Deploy, configure, update a Kubernetes cluster in Azure Container Service by running kubectl commands","doNotSuggest":false,"ignoreCase":"value","enum":["Kubernetes@1"]},{"description":"Deploy, configure, update a Kubernetes cluster in Azure Container Service by running kubectl commands","doNotSuggest":false,"ignoreCase":"value","enum":["Kubernetes@0"]},{"description":"Build and deploy an Azure IoT Edge image","doNotSuggest":false,"ignoreCase":"value","enum":["AzureIoTEdge@2"]},{"description":"Deploy a Docker Compose application to an Azure Service Fabric cluster","doNotSuggest":false,"ignoreCase":"value","enum":["ServiceFabricComposeDeploy@0"]},{"description":"Sign and align Android APK files","doNotSuggest":false,"ignoreCase":"value","enum":["AndroidSigning@2"]},{"description":"Sign and align Android APK files","doNotSuggest":false,"ignoreCase":"value","enum":["AndroidSigning@1"]},{"description":"Sign and align Android APK files","doNotSuggest":false,"ignoreCase":"value","enum":["AndroidSigning@3"]},{"description":"Download a named artifact from a pipeline to a local path","deprecationMessage":"DownloadPipelineArtifact is deprecated - Download a named artifact from a pipeline to a local path","doNotSuggest":true,"ignoreCase":"value","enum":["DownloadPipelineArtifact@1"]},{"description":"Downloads an artifact associated with a pipeline","deprecationMessage":"DownloadPipelineArtifact is deprecated - Downloads an artifact associated with a pipeline","doNotSuggest":true,"ignoreCase":"value","enum":["DownloadPipelineArtifact@0"]},{"description":"Download build and pipeline artifacts","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadPipelineArtifact@2"]},{"description":"Use the specified version of Python from the tool cache, optionally adding it to the PATH","doNotSuggest":false,"ignoreCase":"value","enum":["UsePythonVersion@0"]},{"description":"Scan accessibility issues in an Azure DevOps pipeline","doNotSuggest":false,"ignoreCase":"value","enum":["accessibility-insights@1"]},{"description":"Uploads a Folder to the Azure DevOps Drop Service","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildUploadVstsDropFolder@2"]},{"description":"Uploads a Folder to the Azure DevOps Drop Service","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildUploadVstsDropFolder@1"]},{"description":"Run a PowerShell script in the context of an Azure Service Fabric cluster connection","doNotSuggest":false,"ignoreCase":"value","enum":["ServiceFabricPowerShell@1"]},{"description":"Run tests with Visual Studio test runner","doNotSuggest":false,"ignoreCase":"value","enum":["VSTest@1"]},{"description":"Run unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).","doNotSuggest":false,"ignoreCase":"value","enum":["VSTest@2"]},{"description":"[PREVIEW] Pause a pipeline run to wait for manual interaction. Works only with YAML pipelines.","doNotSuggest":false,"ignoreCase":"value","enum":["ManualValidation@0"]},{"description":"Promote nuget packages to a view in VS and VS-CoreXTFeeds","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildPromoteNugetPackages@2"]},{"description":"Build with Apache Ant","doNotSuggest":false,"ignoreCase":"value","enum":["Ant@1"]},{"description":"Deprecated: Instead, use the 'Visual Studio Test' task to run unit and functional tests","deprecationMessage":"DeployVisualStudioTestAgent is deprecated - Deprecated: Instead, use the 'Visual Studio Test' task to run unit and functional tests","doNotSuggest":true,"ignoreCase":"value","enum":["DeployVisualStudioTestAgent@2"]},{"description":"Deploy and configure Test Agent to run tests on a set of machines","doNotSuggest":false,"ignoreCase":"value","enum":["DeployVisualStudioTestAgent@1"]},{"description":"This task is deprecated. Use `conda` directly in script to work with Anaconda environments.","deprecationMessage":"CondaEnvironment is deprecated - This task is deprecated. Use `conda` directly in script to work with Anaconda environments.","doNotSuggest":true,"ignoreCase":"value","enum":["CondaEnvironment@1"]},{"description":"Create and activate a Conda environment","doNotSuggest":false,"ignoreCase":"value","enum":["CondaEnvironment@0"]},{"description":"Run a Windows command or batch script and optionally allow it to change the environment","doNotSuggest":false,"ignoreCase":"value","enum":["BatchScript@1"]},{"description":"Install npm packages from GitHub.","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadGithubNpmPackage@1"]},{"description":"Build with MSBuild and set the Visual Studio version property","doNotSuggest":false,"ignoreCase":"value","enum":["VSBuild@1"]},{"description":"Download Azure Key Vault secrets","doNotSuggest":false,"ignoreCase":"value","enum":["AzureKeyVault@1"]},{"description":"Download Azure Key Vault secrets","doNotSuggest":false,"ignoreCase":"value","enum":["AzureKeyVault@2"]},{"description":"Acquire a specific version of the .NET Core SDK from the internet or local cache and add it to the PATH","deprecationMessage":"DotNetCoreInstaller is deprecated - Acquire a specific version of the .NET Core SDK from the internet or local cache and add it to the PATH","doNotSuggest":true,"ignoreCase":"value","enum":["DotNetCoreInstaller@1"]},{"description":"Acquires a specific version of the .NET Core SDK from the internet or the local cache and adds it to the PATH. Use this task to change the version of .NET Core used in subsequent tasks. Additionally provides proxy support.","doNotSuggest":false,"ignoreCase":"value","enum":["UseDotNet@2"]},{"description":"Acquire a specific version of the .NET Core SDK from the internet or local cache and add it to the PATH","doNotSuggest":false,"ignoreCase":"value","enum":["DotNetCoreInstaller@0"]},{"description":"Start, stop, restart, slot swap, slot delete, install site extensions or enable continuous monitoring for an Azure App Service","doNotSuggest":false,"ignoreCase":"value","enum":["AzureAppServiceManage@0"]},{"description":"Install Azure Func Core Tools","doNotSuggest":false,"ignoreCase":"value","enum":["FuncToolsInstaller@0"]},{"description":"Replace tokens with variable values in XML or JSON configuration files","doNotSuggest":false,"ignoreCase":"value","enum":["FileTransform@1"]},{"description":"Replace tokens with variable values in XML or JSON configuration files","doNotSuggest":false,"ignoreCase":"value","enum":["FileTransform@2"]},{"description":"Verifies that mac files have been correctly codesigned. This can only be used on Mac hosts.","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildMacSignVerify@0"]},{"description":"Extract a variety of archive and compression files such as .7z, .rar, .tar.gz, and .zip","doNotSuggest":false,"ignoreCase":"value","enum":["ExtractFiles@1"]},{"description":"Build an Android app with Xamarin","doNotSuggest":false,"ignoreCase":"value","enum":["XamarinAndroid@1"]},{"description":"Creates a manifest.json and bsi.json for all the files in a folder. This generated manifest can be used to validate the contents of the folder in the future.","doNotSuggest":false,"ignoreCase":"value","enum":["ManifestGeneratorTask@0"]},{"description":"(Deprecated) Use the PowerShell task version 2 for online scripts","deprecationMessage":"Powershellpp is deprecated - (Deprecated) Use the PowerShell task version 2 for online scripts","doNotSuggest":true,"ignoreCase":"value","enum":["Powershellpp@0"]},{"description":"[DEPRECATED] Use the Copy Files task and the Publish Build Artifacts task instead","deprecationMessage":"CopyPublishBuildArtifacts is deprecated - [DEPRECATED] Use the Copy Files task and the Publish Build Artifacts task instead","doNotSuggest":true,"ignoreCase":"value","enum":["CopyPublishBuildArtifacts@1"]},{"description":"Execute Bash on POSIX, CMD on Windows","doNotSuggest":false,"ignoreCase":"value","enum":["BashOrCmd@0"]},{"description":"Download a package from a package management feed in Azure Artifacts","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadPackage@1"]},{"description":"Download a package from a package management feed in Azure Artifacts","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadPackage@0"]},{"description":"This task is deprecated.","deprecationMessage":"MicroBuildStaticDrop is deprecated - This task is deprecated.","doNotSuggest":true,"ignoreCase":"value","enum":["MicroBuildStaticDrop@1"]},{"description":"Deploy an Azure Resource Manager (ARM) template to a resource group and manage virtual machines","doNotSuggest":false,"ignoreCase":"value","enum":["AzureResourceGroupDeployment@2"]},{"description":"Deploy, start, stop, delete Azure Resource Groups","deprecationMessage":"AzureResourceGroupDeployment is deprecated - Deploy, start, stop, delete Azure Resource Groups","doNotSuggest":true,"ignoreCase":"value","enum":["AzureResourceGroupDeployment@1"]},{"description":"Deploy an Azure Resource Manager (ARM) template to all the deployment scopes","doNotSuggest":false,"ignoreCase":"value","enum":["AzureResourceManagerTemplateDeployment@3"]},{"description":"Invoke REST API as a part of your process.","doNotSuggest":false,"ignoreCase":"value","enum":["InvokeRESTAPI@0"]},{"description":"Invoke a REST API as a part of your pipeline.","doNotSuggest":false,"ignoreCase":"value","enum":["InvokeRESTAPI@1"]},{"description":"Archive files using compression formats such as .7z, .rar, .tar.gz, and .zip.","doNotSuggest":false,"ignoreCase":"value","enum":["ArchiveFiles@1"]},{"description":"Compress files into .7z, .tar.gz, or .zip","doNotSuggest":false,"ignoreCase":"value","enum":["ArchiveFiles@2"]},{"description":"Write a comment to your Github entity i.e. issue or a Pull Request (PR)","doNotSuggest":false,"ignoreCase":"value","enum":["GitHubComment@0"]},{"description":"Copy files from a source folder to a target folder using patterns matching file paths (not folder paths)","doNotSuggest":false,"ignoreCase":"value","enum":["CopyFiles@2"]},{"description":"Copy files from source folder to target folder using minimatch patterns (The minimatch patterns will only match file paths, not folder paths)","doNotSuggest":false,"ignoreCase":"value","enum":["CopyFiles@1"]},{"description":"Run your scripts and make changes to your Azure Database for MySQL","doNotSuggest":false,"ignoreCase":"value","enum":["AzureMysqlDeployment@1"]},{"description":"Install and publish npm packages, or run an npm command. Supports npmjs.com and authenticated registries like Azure Artifacts.","doNotSuggest":false,"ignoreCase":"value","enum":["Npm@1"]},{"description":"Run an npm command. Use NpmAuthenticate@0 task for latest capabilities.","doNotSuggest":false,"ignoreCase":"value","enum":["Npm@0"]},{"description":"Validates a given drop against a manifest generated at build time to verify the integrity of the drop.","doNotSuggest":false,"ignoreCase":"value","enum":["DropValidatorTask@0"]},{"description":"[PREVIEW] Build and deploy an Azure Static Web App","doNotSuggest":false,"ignoreCase":"value","enum":["AzureStaticWebApp@0"]},{"description":"Set up a Node.js environment and add it to the PATH, additionally providing proxy support","doNotSuggest":false,"ignoreCase":"value","enum":["UseNode@1"]},{"description":"Finds or downloads and caches the specified version spec of Node.js and adds it to the PATH","doNotSuggest":false,"ignoreCase":"value","enum":["NodeTool@0"]},{"description":"UnZip a package","doNotSuggest":false,"ignoreCase":"value","enum":["unzip@0"]},{"description":"Deploy a SQL Server database using DACPAC","deprecationMessage":"SqlServerDacpacDeployment is deprecated - Deploy a SQL Server database using DACPAC","doNotSuggest":true,"ignoreCase":"value","enum":["SqlServerDacpacDeployment@1"]},{"description":"Acquire the test platform from nuget.org or the tool cache. Satisfies the ‘vstest’ demand and can be used for running tests and collecting diagnostic data using the Visual Studio Test task.","doNotSuggest":false,"ignoreCase":"value","enum":["VisualStudioTestPlatformInstaller@1"]},{"description":"Sends a message to Azure Service Bus using a service connection (no agent is required)","doNotSuggest":false,"ignoreCase":"value","enum":["PublishToAzureServiceBus@1"]},{"description":"Sends a message to azure service bus using a service connection (no agent required).","doNotSuggest":false,"ignoreCase":"value","enum":["PublishToAzureServiceBus@0"]},{"description":"Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts","doNotSuggest":false,"ignoreCase":"value","enum":["KubernetesManifest@0"]},{"description":"Download files that were saved as artifacts of a completed build","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadBuildArtifacts@1"]},{"description":"Download files that were saved as artifacts of a completed build","doNotSuggest":false,"ignoreCase":"value","enum":["DownloadBuildArtifacts@0"]},{"description":"Install CocoaPods dependencies for Swift and Objective-C Cocoa projects","doNotSuggest":false,"ignoreCase":"value","enum":["CocoaPods@0"]},{"description":"Archives symbols on Symweb.","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildArchiveSymbols@1"]},{"description":"Deploy applications to Azure Spring Cloud and manage deployments.","doNotSuggest":false,"ignoreCase":"value","enum":["AzureSpringCloud@0"]},{"description":"Deploy an Azure Web App for Linux or Windows","doNotSuggest":false,"ignoreCase":"value","enum":["AzureWebApp@1"]},{"description":"Run Azure CLI commands against an Azure subscription in a Shell script when running on Linux agent or Batch script when running on Windows agent.","doNotSuggest":false,"ignoreCase":"value","enum":["AzureCLI@1"]},{"description":"Run Azure CLI commands against an Azure subscription in a PowerShell Core/Shell script when running on Linux agent or PowerShell/PowerShell Core/Batch script when running on Windows agent.","doNotSuggest":false,"ignoreCase":"value","enum":["AzureCLI@2"]},{"description":"Run a Shell or Batch script with Azure CLI commands against an azure subscription","doNotSuggest":false,"ignoreCase":"value","enum":["AzureCLI@0"]},{"description":"Installs and configures the MicroBuild VC Error Codes plugin for use during the build","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildVCErrorCodesPlugin@2"]},{"description":"Create and start an Azure Cosmos DB Emulator container for testing","doNotSuggest":false,"ignoreCase":"value","enum":["CosmosDbEmulator@2"]},{"description":"Verifies that files have been correctly codesigned","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildCodesignVerify@2"]},{"description":"Verifies that files have been correctly codesigned","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildCodesignVerify@3"]},{"description":"Create, edit, or delete a GitHub release","doNotSuggest":false,"ignoreCase":"value","enum":["GitHubRelease@1"]},{"description":"Create, edit, or delete a GitHub release","doNotSuggest":false,"ignoreCase":"value","enum":["GitHubRelease@0"]},{"description":"Use cURL to upload files with FTP, FTPS, SFTP, HTTP, and more.","doNotSuggest":false,"ignoreCase":"value","enum":["cURLUploader@1"]},{"description":"Use cURL's supported protocols to upload files","doNotSuggest":false,"ignoreCase":"value","enum":["cURLUploader@2"]},{"description":"Update/Add App settings an Azure Web App for Linux or Windows","doNotSuggest":false,"ignoreCase":"value","enum":["AzureAppServiceSettings@1"]},{"description":"Download or publish Universal Packages","doNotSuggest":false,"ignoreCase":"value","enum":["UniversalPackages@0"]},{"description":"Security and compliance assessment for Azure Policy","doNotSuggest":false,"ignoreCase":"value","enum":["AzurePolicyCheckGate@0"]},{"description":"Deploy Azure function to Kubernetes cluster.","doNotSuggest":false,"ignoreCase":"value","enum":["AzureFunctionOnKubernetes@0"]},{"description":"Retains one or more Azure DevOps Drops permanently","doNotSuggest":false,"ignoreCase":"value","enum":["MicroBuildRetainVstsDrops@1"]},{"description":"Run a shell script using Bash","doNotSuggest":false,"ignoreCase":"value","enum":["ShellScript@2"]},{"description":"Run a Bash script on macOS, Linux, or Windows","doNotSuggest":false,"ignoreCase":"value","enum":["Bash@3"]},{"description":"Publish build artifacts to Azure Pipelines or a Windows file share","doNotSuggest":false,"ignoreCase":"value","enum":["PublishBuildArtifacts@1"]},{"description":"Install an SSH key prior to a build or deployment","doNotSuggest":false,"ignoreCase":"value","enum":["InstallSSHKey@0"]},{"description":"Deploy a virtual machine scale set image","doNotSuggest":false,"ignoreCase":"value","enum":["AzureVmssDeployment@0"]},{"description":"Adds tags to a build or release","doNotSuggest":false,"ignoreCase":"value","enum":["tagBuildOrRelease@0"]},{"description":"Create or update Azure App Service using Azure PowerShell","deprecationMessage":"AzureWebPowerShellDeployment is deprecated - Create or update Azure App Service using Azure PowerShell","doNotSuggest":true,"ignoreCase":"value","enum":["AzureWebPowerShellDeployment@1"]},{"description":"Deploy an Azure Cloud Service","doNotSuggest":false,"ignoreCase":"value","enum":["AzureCloudPowerShellDeployment@1"]},{"description":"Delete folders, or files matching a pattern","doNotSuggest":false,"ignoreCase":"value","enum":["DeleteFiles@1"]},{"description":"Run the gulp Node.js streaming task-based build system","doNotSuggest":false,"ignoreCase":"value","enum":["gulp@1"]},{"description":"Run the gulp Node.js streaming task-based build system","doNotSuggest":false,"ignoreCase":"value","enum":["gulp@0"]},{"description":"Run a quick web performance test in the cloud with Azure Pipelines","deprecationMessage":"QuickPerfTest is deprecated - Run a quick web performance test in the cloud with Azure Pipelines","doNotSuggest":true,"ignoreCase":"value","enum":["QuickPerfTest@1"]},{"description":"Create or update websites, web apps, virtual directories, or application pools","doNotSuggest":false,"ignoreCase":"value","enum":["IISWebAppManagementOnMachineGroup@0"]},{"description":"Install Docker CLI on agent machine.","doNotSuggest":false,"ignoreCase":"value","enum":["DockerInstaller@0"]}]},"displayName":{"type":"string","description":"Human-readable name for the task"},"name":{"type":"string","description":"ID of the task instance","pattern":"^[_A-Za-z0-9]*$"},"condition":{"type":"string","description":"Evaluate this condition expression to determine whether to run this task"},"continueOnError":{"type":"boolean","description":"Continue running the parent job even on failure?"},"enabled":{"type":"string","description":"Run this task when the job runs?"},"retryCountOnTaskFailure":{"type":"integer","description":"Number of retries if the task fails"},"timeoutInMinutes":{"type":"integer","description":"Time to wait for this task to complete before the server kills it"},"inputs":{"type":"object","description":"Task-specific inputs"},"env":{"type":"object","description":"Variables to map into the process's environment"}},"additionalProperties":false,"firstProperty":["task"],"anyOf":[{"properties":{"task":{"description":"Codesign Validation (Injected)\n\nA variant of the Codesign Validation build task that auto-runs on Production builds.","ignoreCase":"value","pattern":"^CodeSignValidationInjected@1$"},"inputs":{"description":"Codesign Validation (Injected) inputs","properties":{"Path":{"type":"string","description":"Folder to Scan","ignoreCase":"key"},"Targets":{"type":"string","description":"Targets to Scan","ignoreCase":"key"},"ToolVersion":{"description":"Tool Version","ignoreCase":"all","enum":["Latest","1.9.0","1.8.2","1.1.0"]},"CatalogPath":{"type":"string","description":"Catalog Path","ignoreCase":"key"},"PolicyType":{"description":"Policy Type","ignoreCase":"all","enum":["AzureSecurityPack","Custom"]},"PolicyFile":{"type":"string","description":"Custom Policy Path","ignoreCase":"key"},"OutputDirectory":{"type":"string","description":"Custom Output Directory","ignoreCase":"key"},"ExcludePassesFromLog":{"type":"string","description":"Exclude Passes From Log","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"PowerShell\n\nRun a PowerShell script on Linux, macOS, or Windows","ignoreCase":"value","pattern":"^PowerShell@2$"},"inputs":{"description":"PowerShell inputs","properties":{"targetType":{"description":"Type","ignoreCase":"all","enum":["filePath","inline"]},"filePath":{"type":"string","description":"Script Path","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"script":{"type":"string","description":"Script","ignoreCase":"key"},"errorActionPreference":{"description":"ErrorActionPreference","ignoreCase":"all","enum":["default","stop","continue","silentlyContinue"]},"warningPreference":{"description":"WarningPreference","ignoreCase":"all","enum":["default","stop","continue","silentlyContinue"]},"informationPreference":{"description":"InformationPreference","ignoreCase":"all","enum":["default","stop","continue","silentlyContinue"]},"verbosePreference":{"description":"VerbosePreference","ignoreCase":"all","enum":["default","stop","continue","silentlyContinue"]},"debugPreference":{"description":"DebugPreference","ignoreCase":"all","enum":["default","stop","continue","silentlyContinue"]},"failOnStderr":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"showWarnings":{"type":"boolean","description":"Show warnings as Azure DevOps warnings","ignoreCase":"key"},"ignoreLASTEXITCODE":{"type":"boolean","description":"Ignore $LASTEXITCODE","ignoreCase":"key"},"pwsh":{"type":"boolean","description":"Use PowerShell Core","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"},"runScriptInSeparateScope":{"type":"boolean","description":"Run script in the separate scope","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"PowerShell\n\nRun a PowerShell script","ignoreCase":"value","pattern":"^PowerShell@1$"},"inputs":{"description":"PowerShell inputs","properties":{"scriptType":{"description":"Type","ignoreCase":"all","enum":["inlineScript","filePath"]},"scriptName":{"type":"string","description":"Script Path","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingFolder":{"type":"string","description":"Working folder","ignoreCase":"key"},"inlineScript":{"type":"string","description":"Inline Script","ignoreCase":"key"},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure PowerShell\n\nRun a PowerShell script within an Azure environment","ignoreCase":"value","pattern":"^AzurePowerShell@5$"},"inputs":{"description":"Azure PowerShell inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","InlineScript"]},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"Inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"errorActionPreference":{"description":"ErrorActionPreference","ignoreCase":"all","enum":["stop","continue","silentlyContinue"]},"FailOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"azurePowerShellVersion":{"description":"Azure PowerShell Version","ignoreCase":"all","enum":["LatestVersion","OtherVersion"],"aliases":["TargetAzurePs"]},"preferredAzurePowerShellVersion":{"type":"string","description":"Preferred Azure PowerShell Version","ignoreCase":"key","aliases":["CustomTargetAzurePs"]},"pwsh":{"type":"boolean","description":"Use PowerShell Core","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure PowerShell\n\nRun a PowerShell script within an Azure environment","ignoreCase":"value","pattern":"^AzurePowerShell@2$"},"inputs":{"description":"Azure PowerShell inputs","properties":{"azureConnectionType":{"description":"Azure Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameARM"],"aliases":["ConnectedServiceNameSelector"]},"azureClassicSubscription":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","InlineScript"]},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"Inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"azurePowerShellVersion":{"description":"Azure PowerShell Version","ignoreCase":"all","enum":["LatestVersion","OtherVersion"],"aliases":["TargetAzurePs"]},"preferredAzurePowerShellVersion":{"type":"string","description":"Preferred Azure PowerShell Version","ignoreCase":"key","aliases":["CustomTargetAzurePs"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure PowerShell\n\nRun a PowerShell script within an Azure environment","ignoreCase":"value","pattern":"^AzurePowerShell@3$"},"inputs":{"description":"Azure PowerShell inputs","properties":{"azureConnectionType":{"description":"Azure Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameARM"],"aliases":["ConnectedServiceNameSelector"]},"azureClassicSubscription":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","InlineScript"]},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"Inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"errorActionPreference":{"description":"ErrorActionPreference","ignoreCase":"all","enum":["stop","continue","silentlyContinue"]},"FailOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"azurePowerShellVersion":{"description":"Azure PowerShell Version","ignoreCase":"all","enum":["LatestVersion","OtherVersion"],"aliases":["TargetAzurePs"]},"preferredAzurePowerShellVersion":{"type":"string","description":"Preferred Azure PowerShell Version","ignoreCase":"key","aliases":["CustomTargetAzurePs"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure PowerShell\n\nRun a PowerShell script within an Azure environment","ignoreCase":"value","pattern":"^AzurePowerShell@4$"},"inputs":{"description":"Azure PowerShell inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","InlineScript"]},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"Inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"errorActionPreference":{"description":"ErrorActionPreference","ignoreCase":"all","enum":["stop","continue","silentlyContinue"]},"FailOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"RestrictContextToCurrentTask":{"type":"boolean","description":"Restrict scope of context to current task","ignoreCase":"key"},"azurePowerShellVersion":{"description":"Azure PowerShell Version","ignoreCase":"all","enum":["LatestVersion","OtherVersion"],"aliases":["TargetAzurePs"]},"preferredAzurePowerShellVersion":{"type":"string","description":"Preferred Azure PowerShell Version","ignoreCase":"key","aliases":["CustomTargetAzurePs"]},"pwsh":{"type":"boolean","description":"Use PowerShell Core","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure PowerShell\n\nRun a PowerShell script within an Azure environment","ignoreCase":"value","pattern":"^AzurePowerShell@1$"},"inputs":{"description":"Azure PowerShell inputs","properties":{"ConnectedServiceNameSelector":{"description":"Azure Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameARM"]},"ConnectedServiceName":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key"},"ConnectedServiceNameARM":{"type":"string","description":"Azure Subscription","ignoreCase":"key"},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","InlineScript"]},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"Inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MySQL database deploy\n\nRun scripts and make changes to a MySQL Database","ignoreCase":"value","pattern":"^MysqlDeploymentOnMachineGroup@1$"},"inputs":{"description":"MySQL database deploy inputs","properties":{"TaskNameSelector":{"description":"Deploy MySql Using","ignoreCase":"all","enum":["SqlTaskFile","InlineSqlTask"]},"SqlFile":{"type":"string","description":"MySQL Script","ignoreCase":"key"},"SqlInline":{"type":"string","description":"Inline MySQL Script","ignoreCase":"key"},"ServerName":{"type":"string","description":"Host Name","ignoreCase":"key"},"DatabaseName":{"type":"string","description":"Database Name","ignoreCase":"key"},"SqlUsername":{"type":"string","description":"Mysql User Name","ignoreCase":"key"},"SqlPassword":{"type":"string","description":"Password","ignoreCase":"key"},"SqlAdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["SqlUsername","SqlPassword"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Prefast Plugin\n\nInstalls and configures the MicroBuild Prefast plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildPrefastPlugin@2$"},"inputs":{"description":"MicroBuild Prefast Plugin inputs","properties":{"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Python pip authenticate\n\nAuthentication task for the pip client used for installing Python distributions","ignoreCase":"value","pattern":"^PipAuthenticate@1$"},"inputs":{"description":"Python pip authenticate inputs","properties":{"artifactFeeds":{"type":"string","description":"My feeds (select below)","ignoreCase":"key","aliases":["artifactFeeds"]},"pythonDownloadServiceConnections":{"type":"string","description":"Feeds from external organizations","ignoreCase":"key","aliases":["pythonDownloadServiceConnections"]},"onlyAddExtraIndex":{"type":"boolean","description":"Don't set primary index URL","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Python pip authenticate\n\nAuthentication task for the pip client used for installing Python distributions","ignoreCase":"value","pattern":"^PipAuthenticate@0$"},"inputs":{"description":"Python pip authenticate inputs","properties":{"artifactFeeds":{"type":"string","description":"My feeds (select below)","ignoreCase":"key","aliases":["feedList"]},"externalFeeds":{"type":"string","description":"Feeds from external organizations","ignoreCase":"key","aliases":["externalSources"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Maven\n\nBuild, test, and deploy with Apache Maven","ignoreCase":"value","pattern":"^Maven@2$"},"inputs":{"description":"Maven inputs","properties":{"mavenPomFile":{"type":"string","description":"Maven POM file","ignoreCase":"key","aliases":["mavenPOMFile"]},"goals":{"type":"string","description":"Goal(s)","ignoreCase":"key"},"options":{"type":"string","description":"Options","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test results files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"allowBrokenSymlinks":{"type":"boolean","description":"Allow broken symbolic links","ignoreCase":"key","aliases":["allowBrokenSymbolicLinks"]},"codeCoverageToolOption":{"description":"Code coverage tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilter":{"type":"string","description":"Class inclusion/exclusion filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class files directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageSourceDirectories":{"type":"string","description":"Source files directories","ignoreCase":"key","aliases":["srcDirectories"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail when code coverage results are missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"codeCoverageRestoreOriginalPomXml":{"type":"boolean","description":"Restore original pom.xml after task execution","ignoreCase":"key","aliases":["restoreOriginalPomXml"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK version","ignoreCase":"all","enum":["default","1.11","1.10","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]},"mavenVersionOption":{"description":"Maven version","ignoreCase":"all","enum":["Default","Path"],"aliases":["mavenVersionSelection"]},"mavenDirectory":{"type":"string","description":"Maven path","ignoreCase":"key","aliases":["mavenPath"]},"mavenSetM2Home":{"type":"boolean","description":"Set M2_HOME variable","ignoreCase":"key"},"mavenOptions":{"type":"string","description":"Set MAVEN_OPTS to","ignoreCase":"key","aliases":["mavenOpts"]},"mavenAuthenticateFeed":{"type":"boolean","description":"Authenticate built-in Maven feeds","ignoreCase":"key","aliases":["mavenFeedAuthenticate"]},"sonarQubeRunAnalysis":{"type":"boolean","description":"Run SonarQube or SonarCloud analysis","ignoreCase":"key","aliases":["sqAnalysisEnabled"]},"isJacocoCoverageReportXML":{"type":"boolean","description":"Use XML Jacoco reports for SonarQube analysis","ignoreCase":"key"},"sqMavenPluginVersionChoice":{"description":"SonarQube scanner for Maven version","ignoreCase":"all","enum":["latest","pom"]},"checkStyleRunAnalysis":{"type":"boolean","description":"Run Checkstyle","ignoreCase":"key","aliases":["checkstyleAnalysisEnabled"]},"pmdRunAnalysis":{"type":"boolean","description":"Run PMD","ignoreCase":"key","aliases":["pmdAnalysisEnabled"]},"findBugsRunAnalysis":{"type":"boolean","description":"Run FindBugs","ignoreCase":"key","aliases":["findbugsAnalysisEnabled"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Maven\n\nBuild, test, and deploy with Apache Maven","ignoreCase":"value","pattern":"^Maven@3$"},"inputs":{"description":"Maven inputs","properties":{"mavenPomFile":{"type":"string","description":"Maven POM file","ignoreCase":"key","aliases":["mavenPOMFile"]},"goals":{"type":"string","description":"Goal(s)","ignoreCase":"key"},"options":{"type":"string","description":"Options","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test results files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"allowBrokenSymlinks":{"type":"boolean","description":"Allow broken symbolic links","ignoreCase":"key","aliases":["allowBrokenSymbolicLinks"]},"codeCoverageToolOption":{"description":"Code coverage tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilter":{"type":"string","description":"Class inclusion/exclusion filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class files directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageSourceDirectories":{"type":"string","description":"Source files directories","ignoreCase":"key","aliases":["srcDirectories"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail when code coverage results are missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"codeCoverageRestoreOriginalPomXml":{"type":"boolean","description":"Restore original pom.xml after task execution","ignoreCase":"key","aliases":["restoreOriginalPomXml"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK version","ignoreCase":"all","enum":["default","1.11","1.10","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]},"mavenVersionOption":{"description":"Maven version","ignoreCase":"all","enum":["Default","Path"],"aliases":["mavenVersionSelection"]},"mavenDirectory":{"type":"string","description":"Maven path","ignoreCase":"key","aliases":["mavenPath"]},"mavenSetM2Home":{"type":"boolean","description":"Set M2_HOME variable","ignoreCase":"key"},"mavenOptions":{"type":"string","description":"Set MAVEN_OPTS to","ignoreCase":"key","aliases":["mavenOpts"]},"mavenAuthenticateFeed":{"type":"boolean","description":"Authenticate built-in Maven feeds","ignoreCase":"key","aliases":["mavenFeedAuthenticate"]},"effectivePomSkip":{"type":"boolean","description":"Skip generating effective POM while authenticating built-in feeds","ignoreCase":"key","aliases":["skipEffectivePom"]},"sonarQubeRunAnalysis":{"type":"boolean","description":"Run SonarQube or SonarCloud analysis","ignoreCase":"key","aliases":["sqAnalysisEnabled"]},"isJacocoCoverageReportXML":{"type":"boolean","description":"Use XML Jacoco reports for SonarQube analysis","ignoreCase":"key"},"sqMavenPluginVersionChoice":{"description":"SonarQube scanner for Maven version","ignoreCase":"all","enum":["latest","pom"]},"checkStyleRunAnalysis":{"type":"boolean","description":"Run Checkstyle","ignoreCase":"key","aliases":["checkstyleAnalysisEnabled"]},"pmdRunAnalysis":{"type":"boolean","description":"Run PMD","ignoreCase":"key","aliases":["pmdAnalysisEnabled"]},"findBugsRunAnalysis":{"type":"boolean","description":"Run FindBugs","ignoreCase":"key","aliases":["findbugsAnalysisEnabled"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Maven\n\nBuild with Apache Maven","ignoreCase":"value","pattern":"^Maven@1$"},"inputs":{"description":"Maven inputs","properties":{"mavenPomFile":{"type":"string","description":"Maven POM file","ignoreCase":"key","aliases":["mavenPOMFile"]},"goals":{"type":"string","description":"Goal(s)","ignoreCase":"key"},"options":{"type":"string","description":"Options","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to TFS/Team Services","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test Results Files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"codeCoverageToolOption":{"description":"Code Coverage Tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilter":{"type":"string","description":"Class Inclusion/Exclusion Filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class Files Directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageSourceDirectories":{"type":"string","description":"Source Files Directories","ignoreCase":"key","aliases":["srcDirectories"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail When Code Coverage Results Are Missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK Version","ignoreCase":"all","enum":["default","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK Path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK Architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]},"mavenVersionOption":{"description":"Maven Version","ignoreCase":"all","enum":["Default","Path"],"aliases":["mavenVersionSelection"]},"mavenDirectory":{"type":"string","description":"Maven Path","ignoreCase":"key","aliases":["mavenPath"]},"mavenSetM2Home":{"type":"boolean","description":"Set M2_HOME variable","ignoreCase":"key"},"mavenOptions":{"type":"string","description":"Set MAVEN_OPTS to","ignoreCase":"key","aliases":["mavenOpts"]},"mavenAuthenticateFeed":{"type":"boolean","description":"Authenticate built-in Maven feeds","ignoreCase":"key","aliases":["mavenFeedAuthenticate"]},"sonarQubeRunAnalysis":{"type":"boolean","description":"Run SonarQube Analysis","ignoreCase":"key","aliases":["sqAnalysisEnabled"]},"sonarQubeServiceEndpoint":{"type":"string","description":"SonarQube Endpoint","ignoreCase":"key","aliases":["sqConnectedServiceName"]},"sonarQubeProjectName":{"type":"string","description":"SonarQube Project Name","ignoreCase":"key","aliases":["sqProjectName"]},"sonarQubeProjectKey":{"type":"string","description":"SonarQube Project Key","ignoreCase":"key","aliases":["sqProjectKey"]},"sonarQubeProjectVersion":{"type":"string","description":"SonarQube Project Version","ignoreCase":"key","aliases":["sqProjectVersion"]},"sonarQubeSpecifyDB":{"type":"boolean","description":"The SonarQube server version is lower than 5.2","ignoreCase":"key","aliases":["sqDbDetailsRequired"]},"sonarQubeDBUrl":{"type":"string","description":"Db Connection String","ignoreCase":"key","aliases":["sqDbUrl"]},"sonarQubeDBUsername":{"type":"string","description":"Db Username","ignoreCase":"key","aliases":["sqDbUsername"]},"sonarQubeDBPassword":{"type":"string","description":"Db User Password","ignoreCase":"key","aliases":["sqDbPassword"]},"sonarQubeIncludeFullReport":{"type":"boolean","description":"Include full analysis report in the build summary (SQ 5.3+)","ignoreCase":"key","aliases":["sqAnalysisIncludeFullReport"]},"sonarQubeFailWhenQualityGateFails":{"type":"boolean","description":"Fail the build on quality gate failure (SQ 5.3+)","ignoreCase":"key","aliases":["sqAnalysisBreakBuildIfQualityGateFailed"]},"checkStyleRunAnalysis":{"type":"boolean","description":"Run Checkstyle","ignoreCase":"key","aliases":["checkstyleAnalysisEnabled"]},"pmdRunAnalysis":{"type":"boolean","description":"Run PMD","ignoreCase":"key","aliases":["pmdAnalysisEnabled"]},"findBugsRunAnalysis":{"type":"boolean","description":"Run FindBugs","ignoreCase":"key","aliases":["findbugsAnalysisEnabled"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Zip A Folder\n\nZip Files and Folder","ignoreCase":"value","pattern":"^zip@0$"},"inputs":{"description":"Zip A Folder inputs","properties":{"pathToZipFolder":{"type":"string","description":"Path to folder","ignoreCase":"key"},"pathToZipFile":{"type":"string","description":"Path to the zip file","ignoreCase":"key"},"overwrite":{"type":"boolean","description":"Overwrite zip file","ignoreCase":"key"}},"additionalProperties":false,"required":["pathToZipFolder","pathToZipFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Publish Symbols to Artifact Services-preview\n\nPublish Symbols to Artifact Services - Internal Preview","ignoreCase":"value","pattern":"^artifactSymbolTask@0$"},"inputs":{"description":"Publish Symbols to Artifact Services-preview inputs","properties":{"symbolServiceURI":{"type":"string","description":"Symbol Service Endpoint","ignoreCase":"key"},"requestName":{"type":"string","description":"Symbol Request Name","ignoreCase":"key"},"sourcePath":{"type":"string","description":"Upload Source Root Path","ignoreCase":"key"},"assemblyPath":{"type":"string","description":"Override path to symbol assemblies","ignoreCase":"key"},"toLowerCase":{"type":"boolean","description":"Lowercase symbol request name","ignoreCase":"key"},"detailedLog":{"type":"boolean","description":"Verbose Logging","ignoreCase":"key"},"expirationInDays":{"type":"string","description":"Expiration (in days)","ignoreCase":"key"},"usePat":{"type":"boolean","description":"Use Personal Access Token","ignoreCase":"key"},"append":{"type":"boolean","description":"Allow appending to existing request","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Rollback PowerShell\n\nRun a powershell script to rollback deployments. Task execution context is available in the powershell context for implementing conditional rollback","ignoreCase":"value","pattern":"^Rollback@1$"},"inputs":{"description":"Rollback PowerShell inputs","properties":{"type":{"description":"Type","ignoreCase":"all","enum":["InlineScript","FilePath"]},"rollbackpowershellfile":{"type":"string","description":"Script Path","ignoreCase":"key"},"additionalarguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"workingFolder":{"type":"string","description":"Working folder","ignoreCase":"key"},"script":{"type":"string","description":"Script","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":".NET Core\n\nBuild, test, package, or publish a dotnet application, or run a custom dotnet command","ignoreCase":"value","pattern":"^DotNetCoreCLI@2$"},"inputs":{"description":".NET Core inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["build","push","pack","publish","restore","run","test","custom"]},"publishWebProjects":{"type":"boolean","description":"Publish web projects","ignoreCase":"key"},"projects":{"type":"string","description":"Path to project(s)","ignoreCase":"key"},"custom":{"type":"string","description":"Custom command","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"restoreArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"publishTestResults":{"type":"boolean","description":"Publish test results and code coverage","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"zipAfterPublish":{"type":"boolean","description":"Zip published projects","ignoreCase":"key"},"modifyOutputPath":{"type":"boolean","description":"Add project's folder name to publish path","ignoreCase":"key"},"feedsToUse":{"description":"Feeds to use","ignoreCase":"all","enum":["select","config"],"aliases":["selectOrConfig"]},"vstsFeed":{"type":"string","description":"Use packages from this Azure Artifacts feed","ignoreCase":"key","aliases":["feedRestore"]},"includeNuGetOrg":{"type":"boolean","description":"Use packages from NuGet.org","ignoreCase":"key"},"nugetConfigPath":{"type":"string","description":"Path to NuGet.config","ignoreCase":"key"},"externalFeedCredentials":{"type":"string","description":"Credentials for feeds outside this organization/collection","ignoreCase":"key","aliases":["externalEndpoints"]},"noCache":{"type":"boolean","description":"Disable local cache","ignoreCase":"key"},"restoreDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["packagesDirectory"]},"verbosityRestore":{"description":"Verbosity","ignoreCase":"all","enum":["-","Quiet","Minimal","Normal","Detailed","Diagnostic"]},"packagesToPush":{"type":"string","description":"Path to NuGet package(s) to publish","ignoreCase":"key","aliases":["searchPatternPush"]},"nuGetFeedType":{"description":"Target feed location","ignoreCase":"all","enum":["internal","external"]},"publishVstsFeed":{"type":"string","description":"Target feed","ignoreCase":"key","aliases":["feedPublish"]},"publishPackageMetadata":{"type":"boolean","description":"Publish pipeline metadata","ignoreCase":"key"},"publishFeedCredentials":{"type":"string","description":"NuGet server","ignoreCase":"key","aliases":["externalEndpoint"]},"packagesToPack":{"type":"string","description":"Path to csproj or nuspec file(s) to pack","ignoreCase":"key","aliases":["searchPatternPack"]},"configuration":{"type":"string","description":"Configuration to Package","ignoreCase":"key","aliases":["configurationToPack"]},"packDirectory":{"type":"string","description":"Package Folder","ignoreCase":"key","aliases":["outputDir"]},"nobuild":{"type":"boolean","description":"Do not build","ignoreCase":"key"},"includesymbols":{"type":"boolean","description":"Include Symbols","ignoreCase":"key"},"includesource":{"type":"boolean","description":"Include Source","ignoreCase":"key"},"versioningScheme":{"description":"Automatic package versioning","ignoreCase":"all","enum":["off","byPrereleaseNumber","byEnvVar","byBuildNumber"]},"versionEnvVar":{"type":"string","description":"Environment variable","ignoreCase":"key"},"majorVersion":{"type":"string","description":"Major","ignoreCase":"key","aliases":["requestedMajorVersion"]},"minorVersion":{"type":"string","description":"Minor","ignoreCase":"key","aliases":["requestedMinorVersion"]},"patchVersion":{"type":"string","description":"Patch","ignoreCase":"key","aliases":["requestedPatchVersion"]},"buildProperties":{"type":"string","description":"Additional build properties","ignoreCase":"key"},"verbosityPack":{"description":"Verbosity","ignoreCase":"all","enum":["-","Quiet","Minimal","Normal","Detailed","Diagnostic"]},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":".NET Core (PREVIEW)\n\nBuild, test and publish using dotnet core command-line.","ignoreCase":"value","pattern":"^DotNetCoreCLI@0$"},"inputs":{"description":".NET Core (PREVIEW) inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["build","publish","restore","test","run"]},"publishWebProjects":{"type":"boolean","description":"Publish Web Projects","ignoreCase":"key"},"projects":{"type":"string","description":"Project(s)","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"zipAfterPublish":{"type":"boolean","description":"Zip Published Projects","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"DotNetCoreCLI is deprecated - Build, test and publish using dotnet core command-line.","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":".NET Core\n\nBuild, test and publish using dotnet core command-line.","ignoreCase":"value","pattern":"^DotNetCoreCLI@1$"},"inputs":{"description":".NET Core inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["build","publish","restore","test","run"]},"publishWebProjects":{"type":"boolean","description":"Publish Web Projects","ignoreCase":"key"},"projects":{"type":"string","description":"Project(s)","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"zipAfterPublish":{"type":"boolean","description":"Zip Published Projects","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Tokenize File\n\nTokenizes a file.","ignoreCase":"value","pattern":"^JSONTokenizer@1$"},"inputs":{"description":"Tokenize File inputs","properties":{"sourcePath":{"type":"string","description":"Source Path","ignoreCase":"key"},"filePattern":{"type":"string","description":"File Pattern","ignoreCase":"key"},"tokenizeType":{"description":"Tokenize Type","ignoreCase":"all","enum":["Json"]},"includes":{"type":"string","description":"Includes","ignoreCase":"key"},"excludes":{"type":"string","description":"Excludes","ignoreCase":"key"},"nullBehavior":{"description":"Null Behavior","ignoreCase":"all","enum":["warning","error"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Send Helix Start Telemetry\n\nSend start job telemetry for .NET Core builds","ignoreCase":"value","pattern":"^SendStartTelemetry@0$"},"inputs":{"description":"Send Helix Start Telemetry inputs","properties":{"helixRepo":{"type":"string","description":"[organization name]/[repository name]","ignoreCase":"key"},"helixType":{"type":"string","description":"telemetry type","ignoreCase":"key"},"maxRetries":{"type":"string","description":"Maximum number of retry attempts","ignoreCase":"key"},"retryDelay":{"type":"string","description":"Number of seconds to wait between retry attempts","ignoreCase":"key"},"runAsPublic":{"type":"boolean","description":"Always send telemetry as public","ignoreCase":"key"},"buildConfig":{"type":"string","description":"Build configuration","ignoreCase":"key"}},"additionalProperties":false,"required":["helixRepo"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Xamarin Component Restore\n\nThis task is deprecated. Use 'NuGet' instead.","ignoreCase":"value","pattern":"^XamarinComponentRestore@0$"},"inputs":{"description":"Xamarin Component Restore inputs","properties":{"solutionFile":{"type":"string","description":"Path to solution","ignoreCase":"key","aliases":["solution"]},"email":{"type":"string","description":"Email","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"}},"additionalProperties":false,"required":["email","password"]}},"deprecationMessage":"XamarinComponentRestore is deprecated - This task is deprecated. Use 'NuGet' instead.","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"ReportGenerator\n\nReportGenerator converts coverage reports generated by coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov or lcov into human readable reports in various formats.","ignoreCase":"value","pattern":"^reportgenerator@5$"},"inputs":{"description":"ReportGenerator inputs","properties":{"reports":{"type":"string","description":"Reports","ignoreCase":"key"},"targetdir":{"type":"string","description":"Target directory","ignoreCase":"key"},"reporttypes":{"type":"string","description":"Report types","ignoreCase":"key"},"sourcedirs":{"type":"string","description":"Source directories","ignoreCase":"key"},"historydir":{"type":"string","description":"History directory","ignoreCase":"key"},"plugins":{"type":"string","description":"Plugins","ignoreCase":"key"},"assemblyfilters":{"type":"string","description":"Assembly filters","ignoreCase":"key"},"classfilters":{"type":"string","description":"Class filters","ignoreCase":"key"},"filefilters":{"type":"string","description":"File filters","ignoreCase":"key"},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["Verbose","Info","Warning","Error","Off"]},"title":{"type":"string","description":"Title","ignoreCase":"key"},"tag":{"type":"string","description":"Tag","ignoreCase":"key"},"customSettings":{"type":"string","description":"Custom settings","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"ReportGenerator\n\nReportGenerator converts coverage reports generated by coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov or lcov into human readable reports in various formats.","ignoreCase":"value","pattern":"^reportgenerator@4$"},"inputs":{"description":"ReportGenerator inputs","properties":{"reports":{"type":"string","description":"Reports","ignoreCase":"key"},"targetdir":{"type":"string","description":"Target directory","ignoreCase":"key"},"reporttypes":{"type":"string","description":"Report types","ignoreCase":"key"},"sourcedirs":{"type":"string","description":"Source directories","ignoreCase":"key"},"historydir":{"type":"string","description":"History directory","ignoreCase":"key"},"plugins":{"type":"string","description":"Plugins","ignoreCase":"key"},"assemblyfilters":{"type":"string","description":"Assembly filters","ignoreCase":"key"},"classfilters":{"type":"string","description":"Class filters","ignoreCase":"key"},"filefilters":{"type":"string","description":"File filters","ignoreCase":"key"},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["Verbose","Info","Warning","Error","Off"]},"title":{"type":"string","description":"Title","ignoreCase":"key"},"tag":{"type":"string","description":"Tag","ignoreCase":"key"},"customSettings":{"type":"string","description":"Custom settings","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure App Service Deploy\n\nUpdate Azure App Service using Web Deploy / Kudu REST APIs","ignoreCase":"value","pattern":"^AzureRmWebAppDeployment@2$"},"inputs":{"description":"Azure App Service Deploy inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Azure Subscription","ignoreCase":"key"},"WebAppName":{"type":"string","description":"App Service name","ignoreCase":"key"},"DeployToSlotFlag":{"type":"boolean","description":"Deploy to slot","ignoreCase":"key"},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"SlotName":{"type":"string","description":"Slot","ignoreCase":"key"},"VirtualApplication":{"type":"string","description":"Virtual Application","ignoreCase":"key"},"Package":{"type":"string","description":"Package or Folder","ignoreCase":"key"},"WebAppUri":{"type":"string","description":"App Service URL","ignoreCase":"key"},"UseWebDeploy":{"type":"boolean","description":"Publish using Web Deploy","ignoreCase":"key"},"SetParametersFile":{"type":"string","description":"SetParameters File","ignoreCase":"key"},"RemoveAdditionalFilesFlag":{"type":"boolean","description":"Remove Additional Files at Destination","ignoreCase":"key"},"ExcludeFilesFromAppDataFlag":{"type":"boolean","description":"Exclude Files from the App_Data Folder","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"},"TakeAppOfflineFlag":{"type":"boolean","description":"Take App Offline","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","WebAppName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure App Service deploy\n\nDeploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby","ignoreCase":"value","pattern":"^AzureRmWebAppDeployment@3$"},"inputs":{"description":"Azure App Service deploy inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"appType":{"description":"App type","ignoreCase":"all","enum":["app","applinux","functionapp","api","mobileapp"],"aliases":["WebAppKind"]},"WebAppName":{"type":"string","description":"App Service name","ignoreCase":"key"},"DeployToSlotFlag":{"type":"boolean","description":"Deploy to slot","ignoreCase":"key"},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"SlotName":{"type":"string","description":"Slot","ignoreCase":"key"},"ImageSource":{"description":"Image Source","ignoreCase":"all","enum":["Registry","Builtin"]},"AzureContainerRegistry":{"type":"string","description":"Registry","ignoreCase":"key"},"AzureContainerRegistryLoginServer":{"type":"string","description":"Registry Login Server Name","ignoreCase":"key"},"AzureContainerRegistryImage":{"type":"string","description":"Image","ignoreCase":"key"},"AzureContainerRegistryTag":{"type":"string","description":"Tag","ignoreCase":"key"},"DockerRepositoryAccess":{"description":"Repository Access","ignoreCase":"all","enum":["private","public"]},"dockerRegistryConnection":{"type":"string","description":"Registry Connection","ignoreCase":"key","aliases":["RegistryConnectedServiceName"]},"PrivateRegistryImage":{"type":"string","description":"Image","ignoreCase":"key"},"PrivateRegistryTag":{"type":"string","description":"Tag","ignoreCase":"key"},"DockerNamespace":{"type":"string","description":"Registry or Namespace","ignoreCase":"key"},"DockerRepository":{"type":"string","description":"Image","ignoreCase":"key"},"DockerImageTag":{"type":"string","description":"Tag","ignoreCase":"key"},"VirtualApplication":{"type":"string","description":"Virtual application","ignoreCase":"key"},"Package":{"type":"string","description":"Package or folder","ignoreCase":"key"},"packageForLinux":{"type":"string","description":"Package or folder","ignoreCase":"key","aliases":["BuiltinLinuxPackage"]},"RuntimeStack":{"type":"string","description":"Runtime Stack","ignoreCase":"key"},"StartupCommand":{"type":"string","description":"Startup command ","ignoreCase":"key"},"WebAppUri":{"type":"string","description":"App Service URL","ignoreCase":"key"},"ScriptType":{"description":"Deployment script type","ignoreCase":"all","enum":["","Inline Script","File Path"]},"InlineScript":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptPath":{"type":"string","description":"Deployment script path","ignoreCase":"key"},"GenerateWebConfig":{"type":"boolean","description":"Generate Web.config","ignoreCase":"key"},"WebConfigParameters":{"type":"string","description":"Web.config parameters","ignoreCase":"key"},"AppSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"ConfigurationSettings":{"type":"string","description":"Configuration settings","ignoreCase":"key"},"TakeAppOfflineFlag":{"type":"boolean","description":"Take App Offline","ignoreCase":"key"},"UseWebDeploy":{"type":"boolean","description":"Publish using Web Deploy","ignoreCase":"key"},"SetParametersFile":{"type":"string","description":"SetParameters file","ignoreCase":"key"},"RemoveAdditionalFilesFlag":{"type":"boolean","description":"Remove additional files at destination","ignoreCase":"key"},"ExcludeFilesFromAppDataFlag":{"type":"boolean","description":"Exclude files from the App_Data folder","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional arguments","ignoreCase":"key"},"RenameFilesFlag":{"type":"boolean","description":"Rename locked files","ignoreCase":"key"},"enableXmlTransform":{"type":"boolean","description":"XML transformation","ignoreCase":"key","aliases":["XmlTransformation"]},"enableXmlVariableSubstitution":{"type":"boolean","description":"XML variable substitution","ignoreCase":"key","aliases":["XmlVariableSubstitution"]},"JSONFiles":{"type":"string","description":"JSON variable substitution","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","WebAppName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure App Service deploy\n\nDeploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby","ignoreCase":"value","pattern":"^AzureRmWebAppDeployment@4$"},"inputs":{"description":"Azure App Service deploy inputs","properties":{"ConnectionType":{"description":"Connection type","ignoreCase":"all","enum":["AzureRM","PublishProfile"]},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"PublishProfilePath":{"type":"string","description":"Publish profile path","ignoreCase":"key"},"PublishProfilePassword":{"type":"string","description":"Publish profile password","ignoreCase":"key"},"appType":{"description":"App Service type","ignoreCase":"all","enum":["webApp","webAppLinux","webAppContainer","functionApp","functionAppLinux","functionAppContainer","apiApp","mobileApp"],"aliases":["WebAppKind"]},"WebAppName":{"type":"string","description":"App Service name","ignoreCase":"key"},"deployToSlotOrASE":{"type":"boolean","description":"Deploy to Slot or App Service Environment","ignoreCase":"key","aliases":["DeployToSlotOrASEFlag"]},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"SlotName":{"type":"string","description":"Slot","ignoreCase":"key"},"DockerNamespace":{"type":"string","description":"Registry or Namespace","ignoreCase":"key"},"DockerRepository":{"type":"string","description":"Image","ignoreCase":"key"},"DockerImageTag":{"type":"string","description":"Tag","ignoreCase":"key"},"VirtualApplication":{"type":"string","description":"Virtual application","ignoreCase":"key"},"packageForLinux":{"type":"string","description":"Package or folder","ignoreCase":"key","aliases":["Package"]},"RuntimeStack":{"type":"string","description":"Runtime Stack","ignoreCase":"key"},"RuntimeStackFunction":{"description":"Runtime Stack","ignoreCase":"all","enum":["DOTNET|2.2","DOTNET|3.1","JAVA|8","JAVA|11","NODE|8","NODE|10","NODE|12","NODE|14","PYTHON|3.6","PYTHON|3.7","PYTHON|3.8"]},"StartupCommand":{"type":"string","description":"Startup command ","ignoreCase":"key"},"ScriptType":{"description":"Deployment script type","ignoreCase":"all","enum":["","Inline Script","File Path"]},"InlineScript":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptPath":{"type":"string","description":"Deployment script path","ignoreCase":"key"},"WebConfigParameters":{"type":"string","description":"Generate web.config parameters for Python, Node.js, Go and Java apps","ignoreCase":"key"},"AppSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"ConfigurationSettings":{"type":"string","description":"Configuration settings","ignoreCase":"key"},"enableCustomDeployment":{"type":"boolean","description":"Select deployment method","ignoreCase":"key","aliases":["UseWebDeploy"]},"DeploymentType":{"description":"Deployment method","ignoreCase":"all","enum":["webDeploy","zipDeploy","runFromZip"]},"TakeAppOfflineFlag":{"type":"boolean","description":"Take App Offline","ignoreCase":"key"},"SetParametersFile":{"type":"string","description":"SetParameters file","ignoreCase":"key"},"RemoveAdditionalFilesFlag":{"type":"boolean","description":"Remove additional files at destination","ignoreCase":"key"},"ExcludeFilesFromAppDataFlag":{"type":"boolean","description":"Exclude files from the App_Data folder","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional arguments","ignoreCase":"key"},"RenameFilesFlag":{"type":"boolean","description":"Rename locked files","ignoreCase":"key"},"enableXmlTransform":{"type":"boolean","description":"XML transformation","ignoreCase":"key","aliases":["XmlTransformation"]},"enableXmlVariableSubstitution":{"type":"boolean","description":"XML variable substitution","ignoreCase":"key","aliases":["XmlVariableSubstitution"]},"JSONFiles":{"type":"string","description":"JSON variable substitution","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"PowerShell on Target Machines\n\nExecute PowerShell scripts on remote machine(s)","ignoreCase":"value","pattern":"^PowerShellOnTargetMachines@1$"},"inputs":{"description":"PowerShell on Target Machines inputs","properties":{"EnvironmentName":{"type":"string","description":"Machines","ignoreCase":"key"},"AdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"AdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"Protocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"TestCertificate":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"ScriptPath":{"type":"string","description":"PowerShell Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"InitializationScriptPath":{"type":"string","description":"Initialization Script","ignoreCase":"key"},"SessionVariables":{"type":"string","description":"Session Variables","ignoreCase":"key"},"RunPowershellInParallel":{"type":"boolean","description":"Run PowerShell in Parallel","ignoreCase":"key"},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"}},"additionalProperties":false,"required":["EnvironmentName","ScriptPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"PowerShell on target machines\n\nExecute PowerShell scripts on remote machines using PSSession and Invoke-Command for remoting","ignoreCase":"value","pattern":"^PowerShellOnTargetMachines@3$"},"inputs":{"description":"PowerShell on target machines inputs","properties":{"Machines":{"type":"string","description":"Machines","ignoreCase":"key"},"UserName":{"type":"string","description":"Username","ignoreCase":"key"},"UserPassword":{"type":"string","description":"Password","ignoreCase":"key"},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","Inline"]},"ScriptPath":{"type":"string","description":"Script File Path","ignoreCase":"key"},"InlineScript":{"type":"string","description":"Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"InitializationScript":{"type":"string","description":"Initialization script","ignoreCase":"key"},"SessionVariables":{"type":"string","description":"Session Variables","ignoreCase":"key"},"CommunicationProtocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"AuthenticationMechanism":{"description":"Authentication","ignoreCase":"all","enum":["Default","Credssp"]},"NewPsSessionOptionArguments":{"type":"string","description":"Session Option parameters","ignoreCase":"key"},"ErrorActionPreference":{"description":"ErrorActionPreference","ignoreCase":"all","enum":["stop","continue","silentlyContinue"]},"failOnStderr":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"ignoreLASTEXITCODE":{"type":"boolean","description":"Ignore $LASTEXITCODE","ignoreCase":"key"},"WorkingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"},"RunPowershellInParallel":{"type":"boolean","description":"Run PowerShell in Parallel","ignoreCase":"key"}},"additionalProperties":false,"required":["Machines"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"PowerShell on Target Machines\n\nExecute PowerShell scripts on remote machine(s)","ignoreCase":"value","pattern":"^PowerShellOnTargetMachines@2$"},"inputs":{"description":"PowerShell on Target Machines inputs","properties":{"EnvironmentName":{"type":"string","description":"Machines","ignoreCase":"key"},"AdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"AdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"Protocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"TestCertificate":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"ScriptPath":{"type":"string","description":"PowerShell Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"},"InitializationScriptPath":{"type":"string","description":"Initialization Script","ignoreCase":"key"},"SessionVariables":{"type":"string","description":"Session Variables","ignoreCase":"key"},"RunPowershellInParallel":{"type":"boolean","description":"Run PowerShell in Parallel","ignoreCase":"key"},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"}},"additionalProperties":false,"required":["EnvironmentName","ScriptPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Publish code coverage results\n\nPublish Cobertura or JaCoCo code coverage results from a build","ignoreCase":"value","pattern":"^PublishCodeCoverageResults@1$"},"inputs":{"description":"Publish code coverage results inputs","properties":{"codeCoverageTool":{"description":"Code coverage tool","ignoreCase":"all","enum":["Cobertura","JaCoCo"]},"summaryFileLocation":{"type":"string","description":"Summary file","ignoreCase":"key"},"pathToSources":{"type":"string","description":"Path to Source files","ignoreCase":"key"},"reportDirectory":{"type":"string","description":"Report directory","ignoreCase":"key"},"additionalCodeCoverageFiles":{"type":"string","description":"Additional files","ignoreCase":"key"},"failIfCoverageEmpty":{"type":"boolean","description":"Fail when code coverage results are missing","ignoreCase":"key"}},"additionalProperties":false,"required":["summaryFileLocation"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Run functional tests\n\nDeprecated: This task and it’s companion task (Visual Studio Test Agent Deployment) are deprecated. Use the 'Visual Studio Test' task instead. The VSTest task can run unit as well as functional tests. Run tests on one or more agents using the multi-agent job setting. Use the 'Visual Studio Test Platform' task to run tests without needing Visual Studio on the agent. VSTest task also brings new capabilities such as automatically rerunning failed tests.","ignoreCase":"value","pattern":"^RunVisualStudioTestsusingTestAgent@1$"},"inputs":{"description":"Run functional tests inputs","properties":{"testMachineGroup":{"type":"string","description":"Machines","ignoreCase":"key"},"dropLocation":{"type":"string","description":"Test Drop Location","ignoreCase":"key"},"testSelection":{"description":"Test Selection","ignoreCase":"all","enum":["testAssembly","testPlan"]},"testPlan":{"type":"string","description":"Test Plan","ignoreCase":"key"},"testSuite":{"type":"string","description":"Test Suite","ignoreCase":"key"},"testConfiguration":{"type":"string","description":"Test Configuration","ignoreCase":"key"},"sourcefilters":{"type":"string","description":"Test Assembly","ignoreCase":"key"},"testFilterCriteria":{"type":"string","description":"Test Filter criteria","ignoreCase":"key"},"runSettingsFile":{"type":"string","description":"Run Settings File","ignoreCase":"key"},"overrideRunParams":{"type":"string","description":"Override Test Run Parameters","ignoreCase":"key"},"codeCoverageEnabled":{"type":"boolean","description":"Code Coverage Enabled","ignoreCase":"key"},"customSlicingEnabled":{"type":"boolean","description":"Distribute tests by number of machines","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"platform":{"type":"string","description":"Platform","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"testConfigurations":{"type":"string","description":"Test Configurations","ignoreCase":"key"},"autMachineGroup":{"type":"string","description":"Application Under Test Machines","ignoreCase":"key"}},"additionalProperties":false,"required":["testMachineGroup","dropLocation"]}},"deprecationMessage":"RunVisualStudioTestsusingTestAgent is deprecated - Deprecated: This task and it’s companion task (Visual Studio Test Agent Deployment) are deprecated. Use the 'Visual Studio Test' task instead. The VSTest task can run unit as well as functional tests. Run tests on one or more agents using the multi-agent job setting. Use the 'Visual Studio Test Platform' task to run tests without needing Visual Studio on the agent. VSTest task also brings new capabilities such as automatically rerunning failed tests.","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Shell++\n\nExecute bash script","ignoreCase":"value","pattern":"^Shellpp@0$"},"inputs":{"description":"Shell++ inputs","properties":{"type":{"description":"Type","ignoreCase":"all","enum":["InlineScript","FilePath"]},"scriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"cwd":{"type":"string","description":"Working Directory","ignoreCase":"key"},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"script":{"type":"string","description":"Script","ignoreCase":"key"}},"additionalProperties":false,"required":["type"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Manual intervention\n\nPause deployment and wait for manual intervention","ignoreCase":"value","pattern":"^ManualIntervention@8$"},"inputs":{"description":"Manual intervention inputs","properties":{"instructions":{"type":"string","description":"Instructions","ignoreCase":"key"},"emailRecipients":{"type":"string","description":"Notify users","ignoreCase":"key"},"onTimeout":{"description":"On timeout","ignoreCase":"all","enum":["reject","resume"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Install Apple provisioning profile\n\nInstall an Apple provisioning profile required to build on a macOS agent machine","ignoreCase":"value","pattern":"^InstallAppleProvisioningProfile@1$"},"inputs":{"description":"Install Apple provisioning profile inputs","properties":{"provisioningProfileLocation":{"description":"Provisioning profile location","ignoreCase":"all","enum":["secureFiles","sourceRepository"]},"provProfileSecureFile":{"type":"string","description":"Provisioning profile","ignoreCase":"key"},"provProfileSourceRepository":{"type":"string","description":"Provisioning profile","ignoreCase":"key"},"removeProfile":{"type":"boolean","description":"Remove profile after build","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Install Apple Provisioning Profile\n\nInstall an Apple provisioning profile required to build on a macOS agent","ignoreCase":"value","pattern":"^InstallAppleProvisioningProfile@0$"},"inputs":{"description":"Install Apple Provisioning Profile inputs","properties":{"provProfileSecureFile":{"type":"string","description":"Provisioning Profile","ignoreCase":"key"},"removeProfile":{"type":"boolean","description":"Remove Profile After Build","ignoreCase":"key"}},"additionalProperties":false,"required":["provProfileSecureFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"SonarQube for MSBuild - End Analysis\n\n[DEPRECATED] Finish the analysis and upload the results to SonarQube","ignoreCase":"value","pattern":"^SonarQubePostTest@1$"},"inputs":{"description":"SonarQube for MSBuild - End Analysis inputs","properties":{},"additionalProperties":false,"required":[]}},"deprecationMessage":"SonarQubePostTest is deprecated - [DEPRECATED] Finish the analysis and upload the results to SonarQube","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Rich Code Navigation Indexer\n\nIndexes repository and stores navigation information","ignoreCase":"value","pattern":"^RichCodeNavIndexer@0$"},"inputs":{"description":"Rich Code Navigation Indexer inputs","properties":{"languages":{"type":"string","description":"Languages to index","ignoreCase":"key"},"githubServiceConnection":{"type":"string","description":"GitHub service connection","ignoreCase":"key"},"environment":{"description":"VS Rich Code Navigation Environment","ignoreCase":"all","enum":["production","staging","development"]},"nugetFeed":{"type":"string","description":"NuGet feed source","ignoreCase":"key"},"nugetVersion":{"type":"string","description":"VS Rich Code Navigation package version","ignoreCase":"key"},"isPrivateFeed":{"type":"boolean","description":"Is Private NuGet Feed?","ignoreCase":"key"},"configFiles":{"type":"string","description":"Project Configuration Files","ignoreCase":"key"},"richNavLogOutputDirectory":{"type":"string","description":"Rich Navigation MsBuild log files output directory","ignoreCase":"key"},"sourceRootDir":{"type":"string","description":"Root directory for source files if different than default","ignoreCase":"key"},"tempDirectory":{"type":"string","description":"Rich Nav temporary output directory","ignoreCase":"key"},"uploadRichNavArtifacts":{"type":"boolean","description":"Should Rich Nav logs be published as an artifact?","ignoreCase":"key"},"disableLsifLogging":{"type":"boolean","description":"Disable information logging from LSIF generation?","ignoreCase":"key"},"maxParallelIndexingJobs":{"type":"integer","description":"Max number of parallel indexing jobs","ignoreCase":"key"},"typescriptVersion":{"type":"string","description":"TypeScript tooling version","ignoreCase":"key"},"csharpVersion":{"type":"string","description":"Csharp tooling version","ignoreCase":"key"},"advancedOptionsCpp":{"type":"string","description":"Advanced c++ options","ignoreCase":"key"},"defaultExpiry":{"type":"integer","description":"Default Expiry","ignoreCase":"key"},"prExpiry":{"type":"integer","description":"PR Expiry","ignoreCase":"key"},"branchRetention":{"type":"string","description":"Branch Retention","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Insert VS Payload\n\nCreates a PR for a Payload Insertion into VS","ignoreCase":"value","pattern":"^MicroBuildInsertVsPayload@3$"},"inputs":{"description":"MicroBuild Insert VS Payload inputs","properties":{"TargetBranch":{"type":"string","description":"Target Branch","ignoreCase":"key"},"InsertionTopicBranch":{"type":"string","description":"Topic Branch Name","ignoreCase":"key"},"TeamName":{"type":"string","description":"Team Name","ignoreCase":"key"},"TeamEmail":{"type":"string","description":"Team Email Address","ignoreCase":"key"},"ComponentJsonValues":{"type":"string","description":"Component.json Values","ignoreCase":"key"},"DefaultConfigValues":{"type":"string","description":"Default.config Values","ignoreCase":"key"},"PackagePropsValues":{"type":"string","description":"Packages.props Values","ignoreCase":"key"},"AssemblyVersionsValues":{"type":"string","description":"AssemblyVersions.tt Values","ignoreCase":"key"},"RevisionTextFiles":{"type":"string","description":"Revision.txt Files","ignoreCase":"key"},"CustomScriptExecutionCommand":{"type":"string","description":"Custom Script Execution Command","ignoreCase":"key"},"InsertionPayloadName":{"type":"string","description":"Payload Name","ignoreCase":"key"},"SkipCreatePR":{"type":"boolean","description":"Do Not Create","ignoreCase":"key"},"AllowTopicBranchUpdate":{"type":"boolean","description":"Allow Topic Branch Update","ignoreCase":"key"},"InsertionDescription":{"type":"string","description":"Description","ignoreCase":"key"},"InsertionReviewers":{"type":"string","description":"Reviewers","ignoreCase":"key"},"InsertionBuildPolicy":{"description":"Build Policy to Queue","ignoreCase":"all","enum":["Request Perf DDRITs"]},"InsertionAccessToken":{"type":"string","description":"Access Token to Use","ignoreCase":"key"},"InsertionWaitMinutes":{"type":"string","description":"Minutes to Wait for PR Completion","ignoreCase":"key"},"AutoCompletePR":{"type":"boolean","description":"Set AutoComplete","ignoreCase":"key"},"AutoCompleteMergeStrategy":{"description":"AutoComplete Merge Strategy","ignoreCase":"all","enum":["NoFastForward","Squash","Rebase","RebaseMerge"]},"AddCommitsToPR":{"type":"boolean","description":"Add Related Commits","ignoreCase":"key"},"CommitsFile":{"type":"string","description":"File Containing Commit Ids","ignoreCase":"key"},"CommitsUri":{"type":"string","description":"Uri to Commits Repo","ignoreCase":"key"},"AddCommitAuthorsToPR":{"type":"boolean","description":"Add Commit Authors to Reviewers","ignoreCase":"key"},"LinkWorkItemsToPR":{"type":"boolean","description":"Link Work Items","ignoreCase":"key"},"AccountUri":{"type":"string","description":"Target Account Uri","ignoreCase":"key"},"TeamProject":{"type":"string","description":"Target Team Project","ignoreCase":"key"},"Repository":{"type":"string","description":"Target Repository","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Insert VS Payload\n\nCreates a PR for a Payload Insertion into VS","ignoreCase":"value","pattern":"^MicroBuildInsertVsPayload@4$"},"inputs":{"description":"MicroBuild Insert VS Payload inputs","properties":{"TargetBranch":{"type":"string","description":"Target Branch","ignoreCase":"key"},"InsertionTopicBranch":{"type":"string","description":"Topic Branch Name","ignoreCase":"key"},"TeamName":{"type":"string","description":"Team Name","ignoreCase":"key"},"TeamEmail":{"type":"string","description":"Team Email Address","ignoreCase":"key"},"ComponentJsonValues":{"type":"string","description":"Component.json Values","ignoreCase":"key"},"DefaultConfigValues":{"type":"string","description":"Default.config Values","ignoreCase":"key"},"PackagePropsValues":{"type":"string","description":"Packages.props Values","ignoreCase":"key"},"AssemblyVersionsValues":{"type":"string","description":"AssemblyVersions.tt Values","ignoreCase":"key"},"RevisionTextFiles":{"type":"string","description":"Revision.txt Files","ignoreCase":"key"},"ComponentSWRFiles":{"type":"string","description":"Component.swr Files","ignoreCase":"key"},"CustomScriptExecutionCommand":{"type":"string","description":"Custom Script Execution Command","ignoreCase":"key"},"InsertionPayloadName":{"type":"string","description":"Payload Name","ignoreCase":"key"},"SkipCreatePR":{"type":"boolean","description":"Do Not Create","ignoreCase":"key"},"AllowTopicBranchUpdate":{"type":"boolean","description":"Allow Topic Branch Update","ignoreCase":"key"},"InsertionDescription":{"type":"string","description":"Description","ignoreCase":"key"},"InsertionReviewers":{"type":"string","description":"Reviewers","ignoreCase":"key"},"InsertionBuildPolicy":{"description":"Build Policy to Queue","ignoreCase":"all","enum":["Request Perf DDRITs"]},"InsertionAccessToken":{"type":"string","description":"Access Token to Use","ignoreCase":"key"},"InsertionWaitMinutes":{"type":"string","description":"Minutes to Wait for PR Completion","ignoreCase":"key"},"AutoCompletePR":{"type":"boolean","description":"Set AutoComplete","ignoreCase":"key"},"AutoCompleteMergeStrategy":{"description":"AutoComplete Merge Strategy","ignoreCase":"all","enum":["NoFastForward","Squash","Rebase","RebaseMerge"]},"AddCommitsToPR":{"type":"boolean","description":"Add Related Commits","ignoreCase":"key"},"CommitsFile":{"type":"string","description":"File Containing Commit Ids","ignoreCase":"key"},"CommitsUri":{"type":"string","description":"Uri to Commits Repo","ignoreCase":"key"},"AddCommitAuthorsToPR":{"type":"boolean","description":"Add Commit Authors to Reviewers","ignoreCase":"key"},"LinkWorkItemsToPR":{"type":"boolean","description":"Link Work Items","ignoreCase":"key"},"AccountUri":{"type":"string","description":"Target Account Uri","ignoreCase":"key"},"TeamProject":{"type":"string","description":"Target Team Project","ignoreCase":"key"},"Repository":{"type":"string","description":"Target Repository","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"PyPI publisher\n\nCreate and upload an sdist or wheel to a PyPI-compatible index using Twine","ignoreCase":"value","pattern":"^PyPIPublisher@0$"},"inputs":{"description":"PyPI publisher inputs","properties":{"pypiConnection":{"type":"string","description":"PyPI service connection","ignoreCase":"key","aliases":["serviceEndpoint"]},"packageDirectory":{"type":"string","description":"Python package directory","ignoreCase":"key","aliases":["wd"]},"alsoPublishWheel":{"type":"boolean","description":"Also publish a wheel","ignoreCase":"key","aliases":["wheel"]}},"additionalProperties":false,"required":["pypiConnection","packageDirectory"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Chef Knife\n\nRun scripts with Knife commands on your Chef workstation","ignoreCase":"value","pattern":"^ChefKnife@1$"},"inputs":{"description":"Chef Knife inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Chef Subscription","ignoreCase":"key"},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","ScriptPath"]}},"deprecationMessage":"ChefKnife is deprecated - Run scripts with Knife commands on your Chef workstation","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Go tool installer\n\nFind in cache or download a specific version of Go and add it to the PATH","ignoreCase":"value","pattern":"^GoTool@0$"},"inputs":{"description":"Go tool installer inputs","properties":{"version":{"type":"string","description":"Version","ignoreCase":"key"},"goPath":{"type":"string","description":"GOPATH","ignoreCase":"key"},"goBin":{"type":"string","description":"GOBIN","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Web App Route Traffic\n\nRoutes traffic of a Web App to an App Slot by the specified percentage","ignoreCase":"value","pattern":"^azureWebAppRouteTraffic@0$"},"inputs":{"description":"Azure Web App Route Traffic inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"WebAppName":{"type":"string","description":"App Service name","ignoreCase":"key"},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"Slot":{"type":"string","description":"Experiment slot","ignoreCase":"key"},"percentTraffic":{"type":"string","description":"Percentage to Route","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","WebAppName","ResourceGroupName","Slot","percentTraffic"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Xcode Package iOS\n\nGenerate an .ipa file from Xcode build output using xcrun (Xcode 7 or below)","ignoreCase":"value","pattern":"^XcodePackageiOS@0$"},"inputs":{"description":"Xcode Package iOS inputs","properties":{"appName":{"type":"string","description":"Name of .app","ignoreCase":"key"},"ipaName":{"type":"string","description":"Name of .ipa","ignoreCase":"key"},"provisioningProfile":{"type":"string","description":"Provisioning Profile Name","ignoreCase":"key"},"sdk":{"type":"string","description":"SDK","ignoreCase":"key"},"appPath":{"type":"string","description":"Path to .app","ignoreCase":"key"},"ipaPath":{"type":"string","description":"Path to place .ipa","ignoreCase":"key"}},"additionalProperties":false,"required":["provisioningProfile"]}},"deprecationMessage":"XcodePackageiOS is deprecated - Generate an .ipa file from Xcode build output using xcrun (Xcode 7 or below)","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Go\n\nGet, build, or test a Go application, or run a custom Go command","ignoreCase":"value","pattern":"^Go@0$"},"inputs":{"description":"Go inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["get","build","test","custom"]},"customCommand":{"type":"string","description":"Custom command","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Tokenize with XPath/Regular expressions\n\nReplaces ____ and/or XPath for XML documents with User Defined variables or configuration json document","ignoreCase":"value","pattern":"^Tokenizer@2$"},"inputs":{"description":"Tokenize with XPath/Regular expressions inputs","properties":{"SourcePath":{"type":"string","description":"Source filename","ignoreCase":"key"},"DestinationPath":{"type":"string","description":"Destination filename","ignoreCase":"key"},"ConfigurationJsonFile":{"type":"string","description":"Configuration Json filename","ignoreCase":"key"},"ReplaceUndefinedValuesWithEmpty":{"type":"boolean","description":"Replace undefined values with empty","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Publish Pipeline Metadata\n\nPublish Pipeline Metadata to Evidence store","ignoreCase":"value","pattern":"^PublishPipelineMetadata@0$"},"inputs":{"description":"Publish Pipeline Metadata inputs","properties":{},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Docker\n\nBuild, tag, push, or run Docker images, or run a Docker command","ignoreCase":"value","pattern":"^Docker@1$"},"inputs":{"description":"Docker inputs","properties":{"containerregistrytype":{"description":"Container registry type","ignoreCase":"all","enum":["Azure Container Registry","Container Registry"]},"addBaseImageData":{"type":"boolean","description":"Add base image metadata to image(s)","ignoreCase":"key"},"dockerRegistryEndpoint":{"type":"string","description":"Docker registry service connection","ignoreCase":"key"},"azureSubscriptionEndpoint":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"azureContainerRegistry":{"type":"string","description":"Azure container registry","ignoreCase":"key"},"command":{"description":"Command","ignoreCase":"all","enum":["Build an image","Tag image","Push an image","Run an image","login","logout"]},"dockerFile":{"type":"string","description":"Dockerfile","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"pushMultipleImages":{"type":"boolean","description":"Push multiple images","ignoreCase":"key"},"tagMultipleImages":{"type":"boolean","description":"Tag multiple images","ignoreCase":"key"},"imageName":{"type":"string","description":"Image name","ignoreCase":"key"},"imageNamesPath":{"type":"string","description":"Image names path","ignoreCase":"key"},"qualifyImageName":{"type":"boolean","description":"Qualify image name","ignoreCase":"key"},"qualifySourceImageName":{"type":"boolean","description":"Qualify source image name","ignoreCase":"key"},"includeSourceTags":{"type":"boolean","description":"Include source tags","ignoreCase":"key"},"includeLatestTag":{"type":"boolean","description":"Include latest tag","ignoreCase":"key"},"addDefaultLabels":{"type":"boolean","description":"Add default labels","ignoreCase":"key"},"useDefaultContext":{"type":"boolean","description":"Use default build context","ignoreCase":"key"},"buildContext":{"type":"string","description":"Build context","ignoreCase":"key"},"imageDigestFile":{"type":"string","description":"Image digest file","ignoreCase":"key"},"containerName":{"type":"string","description":"Container name","ignoreCase":"key"},"ports":{"type":"string","description":"Ports","ignoreCase":"key"},"volumes":{"type":"string","description":"Volumes","ignoreCase":"key"},"envVars":{"type":"string","description":"Environment variables","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key"},"entrypointOverride":{"type":"string","description":"Entry point override","ignoreCase":"key"},"containerCommand":{"type":"string","description":"Container command","ignoreCase":"key"},"runInBackground":{"type":"boolean","description":"Run in background","ignoreCase":"key"},"restartPolicy":{"description":"Restart policy","ignoreCase":"all","enum":["no","onFailure","always","unlessStopped"]},"maxRestartRetries":{"type":"string","description":"Maximum restart retries","ignoreCase":"key"},"dockerHostEndpoint":{"type":"string","description":"Docker host service connection","ignoreCase":"key"},"enforceDockerNamingConvention":{"type":"boolean","description":"Force image name to follow Docker naming convention","ignoreCase":"key"},"memoryLimit":{"type":"string","description":"Memory limit","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Docker\n\nBuild or push Docker images, login or logout, start or stop containers, or run a Docker command","ignoreCase":"value","pattern":"^Docker@2$"},"inputs":{"description":"Docker inputs","properties":{"containerRegistry":{"type":"string","description":"Container registry","ignoreCase":"key"},"repository":{"type":"string","description":"Container repository","ignoreCase":"key"},"command":{"description":"Command","ignoreCase":"all","enum":["buildAndPush","build","push","login","logout","start","stop"]},"Dockerfile":{"type":"string","description":"Dockerfile","ignoreCase":"key"},"buildContext":{"type":"string","description":"Build context","ignoreCase":"key"},"tags":{"type":"string","description":"Tags","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"addPipelineData":{"type":"boolean","description":"Add Pipeline metadata to image(s)","ignoreCase":"key"},"addBaseImageData":{"type":"boolean","description":"Add base image metadata to image(s)","ignoreCase":"key"},"container":{"type":"string","description":"Container","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Docker\n\nBuild, tag, push, or run Docker images, or run a Docker command","ignoreCase":"value","pattern":"^Docker@0$"},"inputs":{"description":"Docker inputs","properties":{"containerregistrytype":{"description":"Container Registry Type","ignoreCase":"all","enum":["Azure Container Registry","Container Registry"]},"dockerRegistryConnection":{"type":"string","description":"Docker Registry Service Connection","ignoreCase":"key","aliases":["dockerRegistryEndpoint"]},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["azureSubscriptionEndpoint"]},"azureContainerRegistry":{"type":"string","description":"Azure Container Registry","ignoreCase":"key"},"action":{"description":"Action","ignoreCase":"all","enum":["Build an image","Tag images","Push an image","Push images","Run an image","Run a Docker command"]},"dockerFile":{"type":"string","description":"Docker File","ignoreCase":"key"},"addBaseImageData":{"type":"boolean","description":"Add base image metadata to image(s)","ignoreCase":"key"},"buildArguments":{"type":"string","description":"Build Arguments","ignoreCase":"key"},"defaultContext":{"type":"boolean","description":"Use Default Build Context","ignoreCase":"key"},"context":{"type":"string","description":"Build Context","ignoreCase":"key"},"imageName":{"type":"string","description":"Image Name","ignoreCase":"key"},"imageNamesPath":{"type":"string","description":"Image Names Path","ignoreCase":"key"},"qualifyImageName":{"type":"boolean","description":"Qualify Image Name","ignoreCase":"key"},"additionalImageTags":{"type":"string","description":"Additional Image Tags","ignoreCase":"key"},"includeSourceTags":{"type":"boolean","description":"Include Source Tags","ignoreCase":"key"},"includeLatestTag":{"type":"boolean","description":"Include Latest Tag","ignoreCase":"key"},"imageDigestFile":{"type":"string","description":"Image Digest File","ignoreCase":"key"},"containerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"ports":{"type":"string","description":"Ports","ignoreCase":"key"},"volumes":{"type":"string","description":"Volumes","ignoreCase":"key"},"envVars":{"type":"string","description":"Environment Variables","ignoreCase":"key"},"workDir":{"type":"string","description":"Working Directory","ignoreCase":"key"},"entrypoint":{"type":"string","description":"Entry Point Override","ignoreCase":"key"},"containerCommand":{"type":"string","description":"Command","ignoreCase":"key"},"detached":{"type":"boolean","description":"Run In Background","ignoreCase":"key"},"restartPolicy":{"description":"Restart Policy","ignoreCase":"all","enum":["no","onFailure","always","unlessStopped"]},"restartMaxRetries":{"type":"string","description":"Maximum Restart Retries","ignoreCase":"key"},"customCommand":{"type":"string","description":"Command","ignoreCase":"key"},"dockerHostEndpoint":{"type":"string","description":"Docker Host Service Connection","ignoreCase":"key"},"enforceDockerNamingConvention":{"type":"boolean","description":"Force image name to follow Docker naming convention","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"memory":{"type":"string","description":"Memory limit","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Publish Artifact Services Drop -preview\n\nPublish to Artifact Services Drop - Internal Preview","ignoreCase":"value","pattern":"^artifactDropTask@0$"},"inputs":{"description":"Publish Artifact Services Drop -preview inputs","properties":{"dropServiceURI":{"type":"string","description":"Drop Service Endpoint","ignoreCase":"key"},"buildNumber":{"type":"string","description":"Drop Name","ignoreCase":"key"},"sourcePath":{"type":"string","description":"Upload Source Root Path","ignoreCase":"key"},"dropExePath":{"type":"string","description":"Override drop.exe Path","ignoreCase":"key"},"toLowerCase":{"type":"boolean","description":"Lowercase drop name","ignoreCase":"key"},"detailedLog":{"type":"boolean","description":"Verbose Logging","ignoreCase":"key"},"usePat":{"type":"boolean","description":"Use Personal Access Token","ignoreCase":"key"},"retentionDays":{"type":"string","description":"Retention (in days)","ignoreCase":"key"},"dropMetadataContainerName":{"type":"string","description":"Drop Metadata Container Name","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Jenkins queue job\n\nQueue a job on a Jenkins server","ignoreCase":"value","pattern":"^JenkinsQueueJob@2$"},"inputs":{"description":"Jenkins queue job inputs","properties":{"serverEndpoint":{"type":"string","description":"Jenkins service connection","ignoreCase":"key"},"jobName":{"type":"string","description":"Job name","ignoreCase":"key"},"isMultibranchJob":{"type":"boolean","description":"Job is of multibranch pipeline type","ignoreCase":"key"},"multibranchPipelineBranch":{"type":"string","description":"Multibranch pipeline branch","ignoreCase":"key"},"captureConsole":{"type":"boolean","description":"Capture console output and wait for completion","ignoreCase":"key"},"capturePipeline":{"type":"boolean","description":"Capture pipeline output and wait for pipeline completion","ignoreCase":"key"},"isParameterizedJob":{"type":"boolean","description":"Parameterized job","ignoreCase":"key","aliases":["parameterizedJob"]},"jobParameters":{"type":"string","description":"Job parameters","ignoreCase":"key"},"failOnUnstableResult":{"type":"boolean","description":"Fail on unstable result","ignoreCase":"key"},"retryCount":{"type":"string","description":"Number of retries for failed connection","ignoreCase":"key"},"delayBetweenRetries":{"type":"string","description":"Time between retries","ignoreCase":"key"}},"additionalProperties":false,"required":["serverEndpoint","jobName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Jenkins Queue Job\n\nQueue a job on a Jenkins server","ignoreCase":"value","pattern":"^JenkinsQueueJob@1$"},"inputs":{"description":"Jenkins Queue Job inputs","properties":{"serverEndpoint":{"type":"string","description":"Jenkins service endpoint","ignoreCase":"key"},"jobName":{"type":"string","description":"Job name","ignoreCase":"key"},"isMultibranchJob":{"type":"boolean","description":"Job is of Multibranch Pipeline type","ignoreCase":"key"},"multibranchPipelineBranch":{"type":"string","description":"Multibranch Pipeline Branch","ignoreCase":"key"},"captureConsole":{"type":"boolean","description":"Capture console output and wait for completion","ignoreCase":"key"},"capturePipeline":{"type":"boolean","description":"Capture pipeline output and wait for pipeline completion","ignoreCase":"key"},"parameterizedJob":{"type":"boolean","description":"Parameterized job","ignoreCase":"key"},"jobParameters":{"type":"string","description":"Job parameters","ignoreCase":"key"}},"additionalProperties":false,"required":["serverEndpoint","jobName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"FTP upload\n\nUpload files using FTP","ignoreCase":"value","pattern":"^FtpUpload@1$"},"inputs":{"description":"FTP upload inputs","properties":{"credentialsOption":{"description":"Authentication Method","ignoreCase":"all","enum":["serviceEndpoint","inputs"],"aliases":["credsType"]},"serverEndpoint":{"type":"string","description":"FTP Service Connection","ignoreCase":"key"},"serverUrl":{"type":"string","description":"Server URL","ignoreCase":"key"},"username":{"type":"string","description":"Username","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"rootDirectory":{"type":"string","description":"Root folder","ignoreCase":"key","aliases":["rootFolder"]},"filePatterns":{"type":"string","description":"File patterns","ignoreCase":"key"},"remoteDirectory":{"type":"string","description":"Remote directory","ignoreCase":"key","aliases":["remotePath"]},"clean":{"type":"boolean","description":"Delete remote directory","ignoreCase":"key"},"cleanContents":{"type":"boolean","description":"Clear remote directory contents","ignoreCase":"key"},"overwrite":{"type":"boolean","description":"Overwrite","ignoreCase":"key"},"preservePaths":{"type":"boolean","description":"Preserve file paths","ignoreCase":"key"},"trustSSL":{"type":"boolean","description":"Trust server certificate","ignoreCase":"key"}},"additionalProperties":false,"required":["rootDirectory"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"FTP upload\n\nUpload files using FTP","ignoreCase":"value","pattern":"^FtpUpload@2$"},"inputs":{"description":"FTP upload inputs","properties":{"credentialsOption":{"description":"Authentication Method","ignoreCase":"all","enum":["serviceEndpoint","inputs"],"aliases":["credsType"]},"serverEndpoint":{"type":"string","description":"FTP Service Connection","ignoreCase":"key"},"serverUrl":{"type":"string","description":"Server URL","ignoreCase":"key"},"username":{"type":"string","description":"Username","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"rootDirectory":{"type":"string","description":"Root folder","ignoreCase":"key","aliases":["rootFolder"]},"filePatterns":{"type":"string","description":"File patterns","ignoreCase":"key"},"remoteDirectory":{"type":"string","description":"Remote directory","ignoreCase":"key","aliases":["remotePath"]},"enableUtf8":{"type":"boolean","description":"Enable UTF8 support","ignoreCase":"key"},"clean":{"type":"boolean","description":"Delete remote directory","ignoreCase":"key"},"cleanContents":{"type":"boolean","description":"Clear remote directory contents","ignoreCase":"key"},"preservePaths":{"type":"boolean","description":"Preserve file paths","ignoreCase":"key"},"trustSSL":{"type":"boolean","description":"Trust server certificate","ignoreCase":"key"},"customCmds":{"type":"string","description":"FTP Commands","ignoreCase":"key"}},"additionalProperties":false,"required":["rootDirectory"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Windows machine file copy\n\nCopy files to remote Windows machines","ignoreCase":"value","pattern":"^WindowsMachineFileCopy@1$"},"inputs":{"description":"Windows machine file copy inputs","properties":{"SourcePath":{"type":"string","description":"Source","ignoreCase":"key"},"EnvironmentName":{"type":"string","description":"Machines","ignoreCase":"key"},"AdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"AdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Destination Folder","ignoreCase":"key"},"CleanTargetBeforeCopy":{"type":"boolean","description":"Clean Target","ignoreCase":"key"},"CopyFilesInParallel":{"type":"boolean","description":"Copy Files in Parallel","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath","TargetPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Windows machine file copy\n\nCopy files to remote Windows machines","ignoreCase":"value","pattern":"^WindowsMachineFileCopy@2$"},"inputs":{"description":"Windows machine file copy inputs","properties":{"SourcePath":{"type":"string","description":"Source","ignoreCase":"key"},"MachineNames":{"type":"string","description":"Machines","ignoreCase":"key"},"AdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"AdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Destination Folder","ignoreCase":"key"},"CleanTargetBeforeCopy":{"type":"boolean","description":"Clean Target","ignoreCase":"key"},"CopyFilesInParallel":{"type":"boolean","description":"Copy Files in Parallel","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath","TargetPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Send email\n\nSend an email to 1 or more addresses via the SMTP server you provide","ignoreCase":"value","pattern":"^SendEmail@1$"},"inputs":{"description":"Send email inputs","properties":{"To":{"type":"string","description":"To Addresses","ignoreCase":"key"},"CC":{"type":"string","description":"CC Addresses","ignoreCase":"key"},"BCC":{"type":"string","description":"BCC Addresses","ignoreCase":"key"},"From":{"type":"string","description":"From Address","ignoreCase":"key"},"Subject":{"type":"string","description":"Mail Subject","ignoreCase":"key"},"Body":{"type":"string","description":"Mail Body","ignoreCase":"key"},"BodyAsHtml":{"type":"boolean","description":"Is HTML Body?:","ignoreCase":"key"},"AddAttachment":{"type":"boolean","description":"Add Attachment?:","ignoreCase":"key"},"Attachment":{"type":"string","description":"Attachment (absolute path)","ignoreCase":"key"},"SmtpServer":{"type":"string","description":"SMTP Server","ignoreCase":"key"},"SmtpPort":{"type":"string","description":"SMTP Port","ignoreCase":"key"},"SmtpUsername":{"type":"string","description":"SMTP Username","ignoreCase":"key"},"SmtpPassword":{"type":"string","description":"SMTP Password","ignoreCase":"key"},"UseSSL":{"type":"boolean","description":"SMTP Use SSL?","ignoreCase":"key"}},"additionalProperties":false,"required":["To","From","Subject"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Android Build\n\n[Deprecated] Use Gradle","ignoreCase":"value","pattern":"^AndroidBuild@1$"},"inputs":{"description":"Android Build inputs","properties":{"gradleWrapper":{"type":"string","description":"Location of Gradle Wrapper","ignoreCase":"key"},"gradleProj":{"type":"string","description":"Project Directory","ignoreCase":"key"},"gradleArguments":{"type":"string","description":"Gradle Arguments","ignoreCase":"key"},"avdName":{"type":"string","description":"Name","ignoreCase":"key"},"createAvd":{"type":"boolean","description":"Create AVD","ignoreCase":"key"},"emulatorTarget":{"type":"string","description":"AVD Target SDK","ignoreCase":"key"},"emulatorDevice":{"type":"string","description":"AVD Device","ignoreCase":"key"},"avdAbi":{"type":"string","description":"AVD ABI","ignoreCase":"key"},"avdForce":{"type":"boolean","description":"Overwrite Existing AVD","ignoreCase":"key"},"avdOptionalArgs":{"type":"string","description":"Create AVD Optional Arguments","ignoreCase":"key"},"startEmulator":{"type":"boolean","description":"Start and Stop Android Emulator","ignoreCase":"key"},"emulatorTimeout":{"type":"string","description":"Timeout in Seconds","ignoreCase":"key"},"emulatorHeadless":{"type":"boolean","description":"Headless Display","ignoreCase":"key"},"emulatorOptionalArgs":{"type":"string","description":"Emulator Optional Arguments","ignoreCase":"key"},"deleteAvd":{"type":"boolean","description":"Delete AVD","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"AndroidBuild is deprecated - [Deprecated] Use Gradle","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Python twine upload authenticate\n\nAuthenticate for uploading Python distributions using twine. Add '-r FeedName/EndpointName --config-file $(PYPIRC_PATH)' to your twine upload command. For feeds present in this organization, use the feed name as the repository (-r). Otherwise, use the endpoint name defined in the service connection.","ignoreCase":"value","pattern":"^TwineAuthenticate@1$"},"inputs":{"description":"Python twine upload authenticate inputs","properties":{"artifactFeed":{"type":"string","description":"My feed (select below)","ignoreCase":"key","aliases":["artifactFeed"]},"pythonUploadServiceConnection":{"type":"string","description":"Feed from external organizations","ignoreCase":"key","aliases":["pythonUploadServiceConnection"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Python twine upload authenticate\n\nAuthenticate for uploading Python distributions using twine. Add '-r FeedName/EndpointName --config-file $(PYPIRC_PATH)' to your twine upload command. For feeds present in this organization, use the feed name as the repository (-r). Otherwise, use the endpoint name defined in the service connection.","ignoreCase":"value","pattern":"^TwineAuthenticate@0$"},"inputs":{"description":"Python twine upload authenticate inputs","properties":{"artifactFeeds":{"type":"string","description":"My feeds (select below)","ignoreCase":"key","aliases":["feedList"]},"externalFeeds":{"type":"string","description":"Feeds from external organizations","ignoreCase":"key","aliases":["externalSources"]},"publishPackageMetadata":{"type":"boolean","description":"Publish pipeline metadata","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"IIS web app deploy\n\nDeploy a website or web application using Web Deploy","ignoreCase":"value","pattern":"^IISWebAppDeploymentOnMachineGroup@0$"},"inputs":{"description":"IIS web app deploy inputs","properties":{"WebSiteName":{"type":"string","description":"Website Name","ignoreCase":"key"},"VirtualApplication":{"type":"string","description":"Virtual Application","ignoreCase":"key"},"Package":{"type":"string","description":"Package or Folder","ignoreCase":"key"},"SetParametersFile":{"type":"string","description":"SetParameters File","ignoreCase":"key"},"RemoveAdditionalFilesFlag":{"type":"boolean","description":"Remove Additional Files at Destination","ignoreCase":"key"},"ExcludeFilesFromAppDataFlag":{"type":"boolean","description":"Exclude Files from the App_Data Folder","ignoreCase":"key"},"TakeAppOfflineFlag":{"type":"boolean","description":"Take App Offline","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"},"XmlTransformation":{"type":"boolean","description":"XML transformation","ignoreCase":"key"},"XmlVariableSubstitution":{"type":"boolean","description":"XML variable substitution","ignoreCase":"key"},"JSONFiles":{"type":"string","description":"JSON variable substitution","ignoreCase":"key"}},"additionalProperties":false,"required":["WebSiteName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Python script\n\nRun a Python file or inline script","ignoreCase":"value","pattern":"^PythonScript@0$"},"inputs":{"description":"Python script inputs","properties":{"scriptSource":{"description":"Script source","ignoreCase":"all","enum":["filePath","inline"]},"scriptPath":{"type":"string","description":"Script path","ignoreCase":"key"},"script":{"type":"string","description":"Script","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"pythonInterpreter":{"type":"string","description":"Python interpreter","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key"},"failOnStderr":{"type":"boolean","description":"Fail on standard error","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Helm tool installer\n\nInstall Helm on an agent machine","ignoreCase":"value","pattern":"^HelmInstaller@1$"},"inputs":{"description":"Helm tool installer inputs","properties":{"helmVersionToInstall":{"type":"string","description":"Helm Version Spec","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Helm tool installer\n\nInstall Helm and Kubernetes on an agent machine","ignoreCase":"value","pattern":"^HelmInstaller@0$"},"inputs":{"description":"Helm tool installer inputs","properties":{"helmVersion":{"type":"string","description":"Helm Version Spec","ignoreCase":"key"},"checkLatestHelmVersion":{"type":"boolean","description":"Check for latest version of Helm","ignoreCase":"key"},"installKubectl":{"type":"boolean","description":"Install Kubectl","ignoreCase":"key","aliases":["installKubeCtl"]},"kubectlVersion":{"type":"string","description":"Kubectl Version Spec","ignoreCase":"key"},"checkLatestKubectl":{"type":"boolean","description":"Check for latest version of kubectl","ignoreCase":"key","aliases":["checkLatestKubeCtl"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Xamarin License\n\n[Deprecated] Upgrade to free version of Xamarin: https://store.xamarin.com","ignoreCase":"value","pattern":"^XamarinLicense@1$"},"inputs":{"description":"Xamarin License inputs","properties":{"action":{"description":"Action","ignoreCase":"all","enum":["Activate","Deactivate"]},"email":{"type":"string","description":"Email","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"product":{"description":"Xamarin Product","ignoreCase":"all","enum":["MA","MT","MM"]},"timeout":{"type":"string","description":"Timeout in Seconds","ignoreCase":"key"}},"additionalProperties":false,"required":["email","password"]}},"deprecationMessage":"XamarinLicense is deprecated - [Deprecated] Upgrade to free version of Xamarin: https://store.xamarin.com","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"NuGet authenticate\n\nConfigure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Requires NuGet >= 4.8.5385, dotnet >= 2.1.400, or MSBuild >= 15.8.166.59604","ignoreCase":"value","pattern":"^NuGetAuthenticate@0$"},"inputs":{"description":"NuGet authenticate inputs","properties":{"nuGetServiceConnections":{"type":"string","description":"Service connection credentials for feeds outside this organization","ignoreCase":"key"},"forceReinstallCredentialProvider":{"type":"boolean","description":"Reinstall the credential provider even if already installed","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Component Governance Detection\n\nInclude with your build to enable automatic Component Governance detection.","ignoreCase":"value","pattern":"^ComponentGovernanceComponentDetection@0$"},"inputs":{"description":"Component Governance Detection inputs","properties":{"scanType":{"description":"Scan mode","ignoreCase":"all","enum":["Register","LogOnly"]},"governanceProduct":{"type":"string","description":"Product","ignoreCase":"key"},"autoInjected":{"type":"boolean","description":"AutoInjected","ignoreCase":"key"},"whatif":{"type":"boolean","description":"[OBSOLETE] Whatif Mode (uncheck and use Scan Mode instead)","ignoreCase":"key"},"useDefaultDetectors":{"type":"boolean","description":"Use the default dependency detectors","ignoreCase":"key"},"detectorsToRun":{"description":"Dependency detectors override","ignoreCase":"all","enum":["NuGet","Npm","Maven"]},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["Register","Normal","Verbose"]},"sourceScanPath":{"type":"string","description":"Working folder","ignoreCase":"key"},"detectorsFilter":{"type":"string","description":"Component detectors filter","ignoreCase":"key"},"dockerImagesToScan":{"type":"string","description":"Docker images to scan","ignoreCase":"key"},"alertWarningLevel":{"description":"Minimum alert severity to warn","ignoreCase":"all","enum":["Never","Critical","High","Medium","Low"]},"failOnAlert":{"type":"boolean","description":"Fail build on alerts above threshold","ignoreCase":"key"},"ignoreDirectories":{"type":"string","description":"Folder exclusion list","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download GitHub Nuget Packages\n\nRestore your nuget packages using dotnet CLI","ignoreCase":"value","pattern":"^DownloadGitHubNugetPackage@1$"},"inputs":{"description":"Download GitHub Nuget Packages inputs","properties":{"packageName":{"type":"string","description":"Package Name","ignoreCase":"key"},"version":{"type":"string","description":"Package Version","ignoreCase":"key"},"externalFeedCredentials":{"type":"string","description":"Credentials for feed from GitHub","ignoreCase":"key","aliases":["externalEndpoints"]},"restoreDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["packagesDirectory"]}},"additionalProperties":false,"required":["packageName","version"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Maven Authenticate\n\nProvides credentials for Azure Artifacts feeds and external maven repositories","ignoreCase":"value","pattern":"^MavenAuthenticate@0$"},"inputs":{"description":"Maven Authenticate inputs","properties":{"artifactsFeeds":{"type":"string","description":"Feeds","ignoreCase":"key"},"mavenServiceConnections":{"type":"string","description":"Credentials for repositories outside this organization/collection","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Review App\n\nUse this task under deploy phase provider to create a resource dynamically","ignoreCase":"value","pattern":"^ReviewApp@0$"},"inputs":{"description":"Review App inputs","properties":{"resourceName":{"type":"string","description":"Resource name","ignoreCase":"key"},"baseEnvironmentName":{"type":"string","description":"Environment name","ignoreCase":"key"},"reviewResourceName":{"type":"string","description":"Review Resource Name","ignoreCase":"key"}},"additionalProperties":false,"required":["resourceName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Java tool installer\n\nAcquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME","ignoreCase":"value","pattern":"^JavaToolInstaller@0$"},"inputs":{"description":"Java tool installer inputs","properties":{"versionSpec":{"type":"string","description":"JDK version","ignoreCase":"key"},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x64","x86"]},"jdkSourceOption":{"description":"JDK source","ignoreCase":"all","enum":["AzureStorage","LocalDirectory","PreInstalled"]},"jdkFile":{"type":"string","description":"JDK file","ignoreCase":"key"},"azureResourceManagerEndpoint":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"azureStorageAccountName":{"type":"string","description":"Storage account name","ignoreCase":"key"},"azureContainerName":{"type":"string","description":"Container name","ignoreCase":"key"},"azureCommonVirtualFile":{"type":"string","description":"Common virtual path","ignoreCase":"key"},"jdkDestinationDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key"},"cleanDestinationDirectory":{"type":"boolean","description":"Clean destination directory","ignoreCase":"key"},"createExtractDirectory":{"type":"boolean","description":"Create directory for extracting","ignoreCase":"key"}},"additionalProperties":false,"required":["jdkArchitectureOption","jdkSourceOption"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Chef\n\nDeploy to Chef environments by editing environment attributes","ignoreCase":"value","pattern":"^Chef@1$"},"inputs":{"description":"Chef inputs","properties":{"connectedServiceName":{"type":"string","description":"Chef Service Connection","ignoreCase":"key"},"Environment":{"type":"string","description":"Environment","ignoreCase":"key"},"Attributes":{"type":"string","description":"Environment Attributes","ignoreCase":"key"},"chefWaitTime":{"type":"string","description":"Wait Time","ignoreCase":"key"}},"additionalProperties":false,"required":["connectedServiceName","Environment","Attributes"]}},"deprecationMessage":"Chef is deprecated - Deploy to Chef environments by editing environment attributes","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Functions\n\nUpdate a function app with .NET, Python, JavaScript, PowerShell, Java based web applications","ignoreCase":"value","pattern":"^AzureFunctionApp@1$"},"inputs":{"description":"Azure Functions inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"appType":{"description":"App type","ignoreCase":"all","enum":["functionApp","functionAppLinux"]},"appName":{"type":"string","description":"App name","ignoreCase":"key"},"deployToSlotOrASE":{"type":"boolean","description":"Deploy to Slot or App Service Environment","ignoreCase":"key"},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"slotName":{"type":"string","description":"Slot","ignoreCase":"key"},"package":{"type":"string","description":"Package or folder","ignoreCase":"key"},"runtimeStack":{"description":"Runtime stack","ignoreCase":"all","enum":["DOTNET|2.2","DOTNET|3.1","JAVA|8","JAVA|11","NODE|8","NODE|10","NODE|12","NODE|14","PYTHON|3.6","PYTHON|3.7","PYTHON|3.8"]},"startUpCommand":{"type":"string","description":"Startup command ","ignoreCase":"key"},"customWebConfig":{"type":"string","description":"Generate web.config parameters for Python, Node.js, Go and Java apps","ignoreCase":"key"},"appSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"configurationStrings":{"type":"string","description":"Configuration settings","ignoreCase":"key"},"deploymentMethod":{"description":"Deployment method","ignoreCase":"all","enum":["auto","zipDeploy","runFromPackage"]}},"additionalProperties":false,"required":["azureSubscription","appType","appName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"npm authenticate (for task runners)\n\nDon't use this task if you're also using the npm task. Provides npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm task runners like gulp and Grunt to authenticate with private registries.","ignoreCase":"value","pattern":"^npmAuthenticate@0$"},"inputs":{"description":"npm authenticate (for task runners) inputs","properties":{"workingFile":{"type":"string","description":".npmrc file to authenticate","ignoreCase":"key"},"customEndpoint":{"type":"string","description":"Credentials for registries outside this organization/collection","ignoreCase":"key"}},"additionalProperties":false,"required":["workingFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MSBuild\n\nBuild with MSBuild","ignoreCase":"value","pattern":"^MSBuild@1$"},"inputs":{"description":"MSBuild inputs","properties":{"solution":{"type":"string","description":"Project","ignoreCase":"key"},"msbuildLocationMethod":{"description":"MSBuild","ignoreCase":"all","enum":["version","location"]},"msbuildVersion":{"description":"MSBuild Version","ignoreCase":"all","enum":["latest","17.0","16.0","15.0","14.0","12.0","4.0"]},"msbuildArchitecture":{"description":"MSBuild Architecture","ignoreCase":"all","enum":["x86","x64"]},"msbuildLocation":{"type":"string","description":"Path to MSBuild","ignoreCase":"key"},"platform":{"type":"string","description":"Platform","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"msbuildArguments":{"type":"string","description":"MSBuild Arguments","ignoreCase":"key"},"clean":{"type":"boolean","description":"Clean","ignoreCase":"key"},"maximumCpuCount":{"type":"boolean","description":"Build in Parallel","ignoreCase":"key"},"restoreNugetPackages":{"type":"boolean","description":"Restore NuGet Packages","ignoreCase":"key"},"logProjectEvents":{"type":"boolean","description":"Record Project Details","ignoreCase":"key"},"createLogFile":{"type":"boolean","description":"Create Log File","ignoreCase":"key"},"logFileVerbosity":{"description":"Log File Verbosity","ignoreCase":"all","enum":["quiet","minimal","normal","detailed","diagnostic"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Coverage Gate\n\nAdds a coverage trend summary section to the build report.","ignoreCase":"value","pattern":"^CoverageGate@1$"},"inputs":{"description":"Coverage Gate inputs","properties":{"minDelta":{"type":"string","description":"Delta","ignoreCase":"key"},"operator":{"description":"Operator","ignoreCase":"all","enum":["le","lt"]},"username":{"type":"string","description":"Username","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Build machine image\n\nBuild a machine image using Packer, which may be used for Azure Virtual machine scale set deployment","ignoreCase":"value","pattern":"^PackerBuild@1$"},"inputs":{"description":"Build machine image inputs","properties":{"templateType":{"description":"Packer template","ignoreCase":"all","enum":["builtin","custom"]},"customTemplateLocation":{"type":"string","description":"Packer template location","ignoreCase":"key"},"customTemplateParameters":{"type":"string","description":"Template parameters","ignoreCase":"key"},"ConnectedServiceName":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"isManagedImage":{"type":"boolean","description":"Managed VM disk image","ignoreCase":"key"},"managedImageName":{"type":"string","description":"Managed VM Disk Image Name ","ignoreCase":"key"},"location":{"type":"string","description":"Storage location","ignoreCase":"key"},"storageAccountName":{"type":"string","description":"Storage account","ignoreCase":"key"},"azureResourceGroup":{"type":"string","description":"Resource group","ignoreCase":"key"},"baseImageSource":{"description":"Base image source","ignoreCase":"all","enum":["default","customVhd"]},"baseImage":{"description":"Base image","ignoreCase":"all","enum":["MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows","MicrosoftWindowsServer:WindowsServer:2016-Datacenter:windows","MicrosoftWindowsServer:WindowsServer:2012-Datacenter:windows","MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:windows","Canonical:UbuntuServer:14.04.4-LTS:linux","Canonical:UbuntuServer:16.04-LTS:linux","Canonical:UbuntuServer:18.04-LTS:linux","RedHat:RHEL:7.2:linux","RedHat:RHEL:6.8:linux","OpenLogic:CentOS:7.2:linux","OpenLogic:CentOS:6.8:linux","credativ:Debian:8:linux","credativ:Debian:7:linux","SUSE:openSUSE-Leap:42.2:linux","SUSE:SLES:12-SP2:linux","SUSE:SLES:11-SP4:linux"]},"customImageUrl":{"type":"string","description":"Base image URL","ignoreCase":"key"},"customImageOSType":{"description":"Base image OS","ignoreCase":"all","enum":["windows","linux"]},"packagePath":{"type":"string","description":"Deployment Package","ignoreCase":"key"},"deployScriptPath":{"type":"string","description":"Deployment script","ignoreCase":"key"},"deployScriptArguments":{"type":"string","description":"Deployment script arguments","ignoreCase":"key"},"additionalBuilderParameters":{"type":"string","description":"Additional Builder parameters","ignoreCase":"key"},"skipTempFileCleanupDuringVMDeprovision":{"type":"boolean","description":"Skip temporary file cleanup during deprovision","ignoreCase":"key"},"packerVersion":{"type":"string","description":"Packer Version","ignoreCase":"key"},"imageUri":{"type":"string","description":"Image URL or Name","ignoreCase":"key"},"imageId":{"type":"string","description":"Azure Resource Id","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","location","storageAccountName","azureResourceGroup","packagePath","deployScriptPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Build machine image\n\nBuild a machine image using Packer, which may be used for Azure Virtual machine scale set deployment","ignoreCase":"value","pattern":"^PackerBuild@0$"},"inputs":{"description":"Build machine image inputs","properties":{"templateType":{"description":"Packer template","ignoreCase":"all","enum":["builtin","custom"]},"customTemplateLocation":{"type":"string","description":"Packer template location","ignoreCase":"key"},"customTemplateParameters":{"type":"string","description":"Template parameters","ignoreCase":"key"},"ConnectedServiceName":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"location":{"type":"string","description":"Storage location","ignoreCase":"key"},"storageAccountName":{"type":"string","description":"Storage account","ignoreCase":"key"},"azureResourceGroup":{"type":"string","description":"Resource group","ignoreCase":"key"},"baseImageSource":{"description":"Base image source","ignoreCase":"all","enum":["default","customVhd"]},"baseImage":{"description":"Base image","ignoreCase":"all","enum":["MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows","MicrosoftWindowsServer:WindowsServer:2016-Datacenter:windows","MicrosoftWindowsServer:WindowsServer:2012-Datacenter:windows","MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:windows","Canonical:UbuntuServer:14.04.4-LTS:linux","Canonical:UbuntuServer:16.04-LTS:linux","RedHat:RHEL:7.2:linux","RedHat:RHEL:6.8:linux","OpenLogic:CentOS:7.2:linux","OpenLogic:CentOS:6.8:linux","credativ:Debian:8:linux","credativ:Debian:7:linux","SUSE:openSUSE-Leap:42.2:linux","SUSE:SLES:12-SP2:linux","SUSE:SLES:11-SP4:linux"]},"customImageUrl":{"type":"string","description":"Base image URL","ignoreCase":"key"},"customImageOSType":{"description":"Base image OS","ignoreCase":"all","enum":["windows","linux"]},"packagePath":{"type":"string","description":"Deployment Package","ignoreCase":"key"},"deployScriptPath":{"type":"string","description":"Deployment script","ignoreCase":"key"},"deployScriptArguments":{"type":"string","description":"Deployment script arguments","ignoreCase":"key"},"additionalBuilderParameters":{"type":"string","description":"Additional Builder parameters","ignoreCase":"key"},"skipTempFileCleanupDuringVMDeprovision":{"type":"boolean","description":"Skip temporary file cleanup during deprovision","ignoreCase":"key"},"imageUri":{"type":"string","description":"Image URL","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","location","storageAccountName","azureResourceGroup","packagePath","deployScriptPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Signing Plugin\n\nInstalls and configures the MicroBuild signing plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSigningPlugin@4$"},"inputs":{"description":"MicroBuild Signing Plugin inputs","properties":{"signType":{"description":"Signing Type","ignoreCase":"all","enum":["test","real"]},"zipSources":{"type":"boolean","description":"Zip Sources When Real Signing","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"skipAssetTest":{"type":"boolean","description":"Skip Asset Test When Real Signing","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Signing Plugin\n\nInstalls and configures the MicroBuild signing plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSigningPlugin@1$"},"inputs":{"description":"MicroBuild Signing Plugin inputs","properties":{"signType":{"description":"Signing Type","ignoreCase":"all","enum":["test","real"]},"zipSources":{"type":"boolean","description":"Zip Sources When Real Signing","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"},"legacySigning":{"type":"boolean","description":"Use Legacy Signing When Real Signing","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Signing Plugin\n\n[Test-Xamarin-0.999.10 (all-lock)] Installs and configures the MicroBuild signing plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSigningPlugin@0$"},"inputs":{"description":"MicroBuild Signing Plugin inputs","properties":{"signType":{"description":"Signing Type","ignoreCase":"all","enum":["test","real"]},"zipSources":{"type":"boolean","description":"Zip Sources When Real Signing","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"skipAssetTest":{"type":"boolean","description":"Skip Asset Test When Real Signing","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Signing Plugin\n\nInstalls and configures the MicroBuild signing plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSigningPlugin@3$"},"inputs":{"description":"MicroBuild Signing Plugin inputs","properties":{"signType":{"description":"Signing Type","ignoreCase":"all","enum":["test","real"]},"zipSources":{"type":"boolean","description":"Zip Sources When Real Signing","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"skipAssetTest":{"type":"boolean","description":"Skip Asset Test When Real Signing","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Signing Plugin\n\nInstalls and configures the MicroBuild signing plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSigningPlugin@2$"},"inputs":{"description":"MicroBuild Signing Plugin inputs","properties":{"signType":{"description":"Signing Type","ignoreCase":"all","enum":["test","real"]},"zipSources":{"type":"boolean","description":"Zip Sources When Real Signing","ignoreCase":"key"},"skipAssetTest":{"type":"boolean","description":"Skip Asset Test When Real Signing","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"NuGet packager\n\nDeprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","ignoreCase":"value","pattern":"^NuGetPackager@0$"},"inputs":{"description":"NuGet packager inputs","properties":{"searchPattern":{"type":"string","description":"Path to csproj or nuspec file(s) to pack","ignoreCase":"key"},"outputdir":{"type":"string","description":"Package Folder","ignoreCase":"key"},"includeReferencedProjects":{"type":"boolean","description":"Include referenced projects","ignoreCase":"key"},"versionByBuild":{"description":"Automatic package versioning","ignoreCase":"all","enum":["false","byPrereleaseNumber","byEnvVar","true"]},"versionEnvVar":{"type":"string","description":"Environment variable","ignoreCase":"key"},"requestedMajorVersion":{"type":"string","description":"Major","ignoreCase":"key"},"requestedMinorVersion":{"type":"string","description":"Minor","ignoreCase":"key"},"requestedPatchVersion":{"type":"string","description":"Patch","ignoreCase":"key"},"configurationToPack":{"type":"string","description":"Configuration to Package","ignoreCase":"key"},"buildProperties":{"type":"string","description":"Additional build properties","ignoreCase":"key"},"nuGetAdditionalArgs":{"type":"string","description":"NuGet Arguments","ignoreCase":"key"},"nuGetPath":{"type":"string","description":"Path to NuGet.exe","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"NuGetPackager is deprecated - Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Update Service Fabric App Versions\n\nAutomatically updates the versions of a packaged Service Fabric application.","ignoreCase":"value","pattern":"^ServiceFabricUpdateAppVersions@1$"},"inputs":{"description":"Update Service Fabric App Versions inputs","properties":{"applicationPackagePath":{"type":"string","description":"Application Package","ignoreCase":"key"},"versionSuffix":{"type":"string","description":"Version Value","ignoreCase":"key"},"versionBehavior":{"description":"Version Behavior","ignoreCase":"all","enum":["Append","Replace"]},"updateOnlyChanged":{"type":"boolean","description":"Update only if changed","ignoreCase":"key"},"pkgArtifactName":{"type":"string","description":"Package Artifact Name","ignoreCase":"key"},"logAllChanges":{"type":"boolean","description":"Log all changes","ignoreCase":"key"},"compareType":{"description":"Compare against","ignoreCase":"all","enum":["LastSuccessful","Specific"]},"buildNumber":{"type":"string","description":"Build Number","ignoreCase":"key"}},"additionalProperties":false,"required":["applicationPackagePath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Update Service Fabric manifests\n\nAutomatically update portions of application and service manifests in a packaged Azure Service Fabric application","ignoreCase":"value","pattern":"^ServiceFabricUpdateManifests@2$"},"inputs":{"description":"Update Service Fabric manifests inputs","properties":{"updateType":{"description":"Update Type","ignoreCase":"all","enum":["Manifest versions","Docker image settings"]},"applicationPackagePath":{"type":"string","description":"Application Package","ignoreCase":"key"},"versionSuffix":{"type":"string","description":"Version Value","ignoreCase":"key"},"versionBehavior":{"description":"Version Behavior","ignoreCase":"all","enum":["Append","Replace"]},"updateOnlyChanged":{"type":"boolean","description":"Update only if changed","ignoreCase":"key"},"pkgArtifactName":{"type":"string","description":"Package Artifact Name","ignoreCase":"key"},"logAllChanges":{"type":"boolean","description":"Log all changes","ignoreCase":"key"},"compareType":{"description":"Compare against","ignoreCase":"all","enum":["LastSuccessful","Specific"]},"buildNumber":{"type":"string","description":"Build Number","ignoreCase":"key"},"overwriteExistingPkgArtifact":{"type":"boolean","description":"Overwrite Existing Package Artifact","ignoreCase":"key"},"imageNamesPath":{"type":"string","description":"Image Names Path","ignoreCase":"key"},"imageDigestsPath":{"type":"string","description":"Image Digests Path","ignoreCase":"key"}},"additionalProperties":false,"required":["applicationPackagePath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Duffle tool installer\n\nInstall a specified version of Duffle for installing and managing CNAB bundles","ignoreCase":"value","pattern":"^DuffleInstaller@0$"},"inputs":{"description":"Duffle tool installer inputs","properties":{"version":{"type":"string","description":"Version","ignoreCase":"key"},"checkLatestVersion":{"type":"boolean","description":"Check for latest version","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Query Azure Monitor alerts\n\nObserve the configured Azure Monitor rules for active alerts","ignoreCase":"value","pattern":"^AzureMonitor@1$"},"inputs":{"description":"Query Azure Monitor alerts inputs","properties":{"connectedServiceNameARM":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"filterType":{"description":"Filter type","ignoreCase":"all","enum":["resource","alertrule","none"]},"resource":{"type":"string","description":"Resource","ignoreCase":"key"},"alertRule":{"type":"string","description":"Alert rule","ignoreCase":"key"},"severity":{"description":"Severity","ignoreCase":"all","enum":["Sev0","Sev1","Sev2","Sev3","Sev4"]},"timeRange":{"description":"Time range","ignoreCase":"all","enum":["1h","1d","7d","30d"]},"alertState":{"description":"Alert state","ignoreCase":"all","enum":["New","Acknowledged","Closed"]},"monitorCondition":{"description":"Monitor condition","ignoreCase":"all","enum":["Fired ","Resolved"]}},"additionalProperties":false,"required":["connectedServiceNameARM","ResourceGroupName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Query Classic Azure Monitor alerts\n\nObserve the configured classic Azure Monitor rules for active alerts","ignoreCase":"value","pattern":"^AzureMonitor@0$"},"inputs":{"description":"Query Classic Azure Monitor alerts inputs","properties":{"connectedServiceNameARM":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"ResourceType":{"description":"Resource type","ignoreCase":"all","enum":["Microsoft.Insights/components","Microsoft.Web/sites","Microsoft.Storage/storageAccounts","Microsoft.Compute/virtualMachines"]},"resourceName":{"type":"string","description":"Resource name","ignoreCase":"key"},"alertRules":{"type":"string","description":"Alert rules","ignoreCase":"key"}},"additionalProperties":false,"required":["connectedServiceNameARM","ResourceGroupName","resourceName","alertRules"]}},"deprecationMessage":"AzureMonitor is deprecated - Observe the configured classic Azure Monitor rules for active alerts","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Generate Test Artifacts\n\nTask to generate runsettings and ADO Drop Urls as artifacts.","ignoreCase":"value","pattern":"^MicroBuildGenerateTestArtifacts@1$"},"inputs":{"description":"MicroBuild Generate Test Artifacts inputs","properties":{"BootstrapperInfoPath":{"type":"string","description":"Bootstrapper Info Path","ignoreCase":"key"},"BuildDropNamePrefix":{"type":"string","description":"Build Drop Name Prefix","ignoreCase":"key"},"TestDropNamePrefix":{"type":"string","description":"Test Drop Name Prefix","ignoreCase":"key"},"RunSettingsOutputFolder":{"type":"string","description":"Runsettings Output Folder","ignoreCase":"key"},"DropUrlsOutputFile":{"type":"string","description":"Drop Urls Output File","ignoreCase":"key"},"DropCoreVersion":{"type":"string","description":"Drop Core Version","ignoreCase":"key"},"DropCoreFeedSource":{"type":"string","description":"Drop Core Feed","ignoreCase":"key"},"NugetOrgPublicFeedSource":{"type":"string","description":"NuGet.org feed location","ignoreCase":"key"},"DropsPat":{"type":"string","description":"PAT for Drop Server","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Network Load Balancer\n\nConnect or disconnect an Azure virtual machine's network interface to a Load Balancer's back end address pool","ignoreCase":"value","pattern":"^AzureNLBManagement@1$"},"inputs":{"description":"Azure Network Load Balancer inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"ResourceGroupName":{"type":"string","description":"Resource Group","ignoreCase":"key"},"LoadBalancer":{"type":"string","description":"Load Balancer Name","ignoreCase":"key"},"Action":{"description":"Action","ignoreCase":"all","enum":["Disconnect","Connect"]}},"additionalProperties":false,"required":["azureSubscription","ResourceGroupName","LoadBalancer","Action"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Cloud-based Apache JMeter load test\n\nRun an Apache JMeter load test in the cloud","ignoreCase":"value","pattern":"^ApacheJMeterLoadTest@1$"},"inputs":{"description":"Cloud-based Apache JMeter load test inputs","properties":{"connectedServiceName":{"type":"string","description":"Azure Pipelines Connection","ignoreCase":"key"},"TestDrop":{"type":"string","description":"Apache JMeter test files folder","ignoreCase":"key"},"LoadTest":{"type":"string","description":"Apache JMeter file","ignoreCase":"key"},"agentCount":{"description":"Agent Count","ignoreCase":"all","enum":["1","2","3","4","5"]},"runDuration":{"description":"Run Duration (sec)","ignoreCase":"all","enum":["60","120","180","240","300"]},"geoLocation":{"description":"Load Location","ignoreCase":"all","enum":["Default","Australia East","Australia Southeast","Brazil South","Central India","Central US","East Asia","East US 2","East US","Japan East","Japan West","North Central US","North Europe","South Central US","South India","Southeast Asia","West Europe","West US"]},"machineType":{"description":"Run load test using","ignoreCase":"all","enum":["0","2"]}},"additionalProperties":false,"required":["TestDrop"]}},"deprecationMessage":"ApacheJMeterLoadTest is deprecated - Run an Apache JMeter load test in the cloud","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Docker Compose\n\nBuild, push or run multi-container Docker applications. Task can be used with Docker or Azure Container registry.","ignoreCase":"value","pattern":"^DockerCompose@0$"},"inputs":{"description":"Docker Compose inputs","properties":{"containerregistrytype":{"description":"Container Registry Type","ignoreCase":"all","enum":["Azure Container Registry","Container Registry"]},"dockerRegistryEndpoint":{"type":"string","description":"Docker Registry Service Connection","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["azureSubscriptionEndpoint"]},"azureContainerRegistry":{"type":"string","description":"Azure Container Registry","ignoreCase":"key"},"dockerComposeFile":{"type":"string","description":"Docker Compose File","ignoreCase":"key"},"additionalDockerComposeFiles":{"type":"string","description":"Additional Docker Compose Files","ignoreCase":"key"},"dockerComposeFileArgs":{"type":"string","description":"Environment Variables","ignoreCase":"key"},"projectName":{"type":"string","description":"Project Name","ignoreCase":"key"},"qualifyImageNames":{"type":"boolean","description":"Qualify Image Names","ignoreCase":"key"},"action":{"description":"Action","ignoreCase":"all","enum":["Build services","Push services","Run services","Run a specific service","Lock services","Write service image digests","Combine configuration","Run a Docker Compose command"]},"additionalImageTags":{"type":"string","description":"Additional Image Tags","ignoreCase":"key"},"includeSourceTags":{"type":"boolean","description":"Include Source Tags","ignoreCase":"key"},"includeLatestTag":{"type":"boolean","description":"Include Latest Tag","ignoreCase":"key"},"buildImages":{"type":"boolean","description":"Build Images","ignoreCase":"key"},"serviceName":{"type":"string","description":"Service Name","ignoreCase":"key"},"containerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"ports":{"type":"string","description":"Ports","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["workDir"]},"entrypoint":{"type":"string","description":"Entry Point Override","ignoreCase":"key"},"containerCommand":{"type":"string","description":"Command","ignoreCase":"key"},"detached":{"type":"boolean","description":"Run in Background","ignoreCase":"key"},"abortOnContainerExit":{"type":"boolean","description":"Abort on Container Exit","ignoreCase":"key"},"imageDigestComposeFile":{"type":"string","description":"Image Digest Compose File","ignoreCase":"key"},"removeBuildOptions":{"type":"boolean","description":"Remove Build Options","ignoreCase":"key"},"baseResolveDirectory":{"type":"string","description":"Base Resolve Directory","ignoreCase":"key"},"outputDockerComposeFile":{"type":"string","description":"Output Docker Compose File","ignoreCase":"key"},"dockerComposeCommand":{"type":"string","description":"Command","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"dockerHostEndpoint":{"type":"string","description":"Docker Host Service Connection","ignoreCase":"key"},"nopIfNoDockerComposeFile":{"type":"boolean","description":"No-op if no Docker Compose File","ignoreCase":"key"},"requireAdditionalDockerComposeFiles":{"type":"boolean","description":"Require Additional Docker Compose Files","ignoreCase":"key"},"currentWorkingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"dockerComposePath":{"type":"string","description":"Docker Compose executable Path","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Monitor alerts (Deprecated)\n\nConfigure alerts on available metrics for an Azure resource (Deprecated)","ignoreCase":"value","pattern":"^AzureMonitorAlerts@0$"},"inputs":{"description":"Azure Monitor alerts (Deprecated) inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"ResourceGroupName":{"type":"string","description":"Resource Group","ignoreCase":"key"},"ResourceType":{"description":"Resource Type","ignoreCase":"all","enum":["Microsoft.Insights/components","Microsoft.Web/sites","Microsoft.Storage/storageAccounts","Microsoft.Compute/virtualMachines"]},"ResourceName":{"type":"string","description":"Resource name","ignoreCase":"key"},"AlertRules":{"type":"string","description":"Alert rules","ignoreCase":"key"},"NotifyServiceOwners":{"type":"boolean","description":"Subscription owners, contributors and readers","ignoreCase":"key"},"NotifyEmails":{"type":"string","description":"Additional administrator emails","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","ResourceGroupName","ResourceName","AlertRules"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Xamarin Test Cloud\n\n[Deprecated] Test mobile apps with Xamarin Test Cloud using Xamarin.UITest. Instead, use the 'App Center test' task.","ignoreCase":"value","pattern":"^XamarinTestCloud@1$"},"inputs":{"description":"Xamarin Test Cloud inputs","properties":{"appFile":{"type":"string","description":"App file","ignoreCase":"key","aliases":["app"]},"dsymFile":{"type":"string","description":"dSYM file (iOS only)","ignoreCase":"key","aliases":["dsym"]},"teamApiKey":{"type":"string","description":"Team API key","ignoreCase":"key"},"email":{"type":"string","description":"User email","ignoreCase":"key","aliases":["user"]},"devices":{"type":"string","description":"Devices","ignoreCase":"key"},"series":{"type":"string","description":"Series","ignoreCase":"key"},"testAssemblyDirectory":{"type":"string","description":"Test assembly directory","ignoreCase":"key","aliases":["testDir"]},"parallelizationOption":{"description":"Parallelization","ignoreCase":"all","enum":["none","--fixture-chunk","--test-chunk"],"aliases":["parallelization"]},"localeOption":{"description":"System language","ignoreCase":"all","enum":["da_DK","nl_NL","en_GB","en_US","fr_FR","de_DE","ja_JP","ru_RU","es_MX","es_ES","user"],"aliases":["locale"]},"userDefinedLocale":{"type":"string","description":"Other locale","ignoreCase":"key"},"testCloudFile":{"type":"string","description":"test-cloud.exe location","ignoreCase":"key","aliases":["testCloudLocation"]},"optionalArgs":{"type":"string","description":"Optional arguments","ignoreCase":"key"},"publishNUnitResults":{"type":"boolean","description":"Publish results to Azure Pipelines","ignoreCase":"key"}},"additionalProperties":false,"required":["appFile","teamApiKey","email","devices","testAssemblyDirectory"]}},"deprecationMessage":"XamarinTestCloud is deprecated - [Deprecated] Test mobile apps with Xamarin Test Cloud using Xamarin.UITest. Instead, use the 'App Center test' task.","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Service Fabric application deployment\n\nDeploy an Azure Service Fabric application to a cluster","ignoreCase":"value","pattern":"^ServiceFabricDeploy@1$"},"inputs":{"description":"Service Fabric application deployment inputs","properties":{"applicationPackagePath":{"type":"string","description":"Application Package","ignoreCase":"key"},"serviceConnectionName":{"type":"string","description":"Cluster Service Connection","ignoreCase":"key"},"publishProfilePath":{"type":"string","description":"Publish Profile","ignoreCase":"key"},"applicationParameterPath":{"type":"string","description":"Application Parameters","ignoreCase":"key"},"overrideApplicationParameter":{"type":"boolean","description":"Override Application Parameters","ignoreCase":"key"},"compressPackage":{"type":"boolean","description":"Compress Package","ignoreCase":"key"},"copyPackageTimeoutSec":{"type":"string","description":"CopyPackageTimeoutSec","ignoreCase":"key"},"registerPackageTimeoutSec":{"type":"string","description":"RegisterPackageTimeoutSec","ignoreCase":"key"},"overwriteBehavior":{"description":"Overwrite Behavior","ignoreCase":"all","enum":["Always","Never","SameAppTypeAndVersion"]},"skipUpgradeSameTypeAndVersion":{"type":"boolean","description":"Skip upgrade for same Type and Version","ignoreCase":"key"},"skipPackageValidation":{"type":"boolean","description":"Skip package validation","ignoreCase":"key"},"useDiffPackage":{"type":"boolean","description":"Use Diff Package","ignoreCase":"key"},"overridePublishProfileSettings":{"type":"boolean","description":"Override All Publish Profile Upgrade Settings","ignoreCase":"key"},"isUpgrade":{"type":"boolean","description":"Upgrade the Application","ignoreCase":"key"},"unregisterUnusedVersions":{"type":"boolean","description":"Unregister Unused Versions","ignoreCase":"key"},"upgradeMode":{"description":"Upgrade Mode","ignoreCase":"all","enum":["Monitored","UnmonitoredAuto","UnmonitoredManual"]},"FailureAction":{"description":"FailureAction","ignoreCase":"all","enum":["Rollback","Manual"]},"UpgradeReplicaSetCheckTimeoutSec":{"type":"string","description":"UpgradeReplicaSetCheckTimeoutSec","ignoreCase":"key"},"TimeoutSec":{"type":"string","description":"TimeoutSec","ignoreCase":"key"},"ForceRestart":{"type":"boolean","description":"ForceRestart","ignoreCase":"key"},"HealthCheckRetryTimeoutSec":{"type":"string","description":"HealthCheckRetryTimeoutSec","ignoreCase":"key"},"HealthCheckWaitDurationSec":{"type":"string","description":"HealthCheckWaitDurationSec","ignoreCase":"key"},"HealthCheckStableDurationSec":{"type":"string","description":"HealthCheckStableDurationSec","ignoreCase":"key"},"UpgradeDomainTimeoutSec":{"type":"string","description":"UpgradeDomainTimeoutSec","ignoreCase":"key"},"ConsiderWarningAsError":{"type":"boolean","description":"ConsiderWarningAsError","ignoreCase":"key"},"DefaultServiceTypeHealthPolicy":{"type":"string","description":"DefaultServiceTypeHealthPolicy","ignoreCase":"key"},"MaxPercentUnhealthyDeployedApplications":{"type":"string","description":"MaxPercentUnhealthyDeployedApplications","ignoreCase":"key"},"UpgradeTimeoutSec":{"type":"string","description":"UpgradeTimeoutSec","ignoreCase":"key"},"ServiceTypeHealthPolicyMap":{"type":"string","description":"ServiceTypeHealthPolicyMap","ignoreCase":"key"},"configureDockerSettings":{"type":"boolean","description":"Configure Docker settings","ignoreCase":"key"},"registryCredentials":{"description":"Registry Credentials Source","ignoreCase":"all","enum":["AzureResourceManagerEndpoint","ContainerRegistryEndpoint","UsernamePassword"]},"dockerRegistryConnection":{"type":"string","description":"Docker Registry Service Connection","ignoreCase":"key","aliases":["dockerRegistryEndpoint"]},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["azureSubscriptionEndpoint"]},"registryUserName":{"type":"string","description":"Registry User Name","ignoreCase":"key"},"registryPassword":{"type":"string","description":"Registry Password","ignoreCase":"key"},"passwordEncrypted":{"type":"boolean","description":"Password Encrypted","ignoreCase":"key"}},"additionalProperties":false,"required":["applicationPackagePath","serviceConnectionName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Cleanup\n\nUploads MicroBuild telemetry. This step should be added at the end of every definition using MicroBuild tasks.","ignoreCase":"value","pattern":"^MicroBuildCleanup@1$"},"inputs":{"description":"MicroBuild Cleanup inputs","properties":{},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild OptProf Plugin\n\nInstalls and configures the MicroBuild OptProf plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildOptProfPlugin@3$"},"inputs":{"description":"MicroBuild OptProf Plugin inputs","properties":{"optimizationDataDropName":{"type":"string","description":"OptimizationData Drop Name","ignoreCase":"key"},"optProfOutputPath":{"type":"string","description":"Optimization Data Output Path","ignoreCase":"key"},"skipRunOptimize":{"type":"boolean","description":"Generate Profile Data Without Optimization","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild OptProf Plugin\n\nInstalls and configures the MicroBuild OptProf plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildOptProfPlugin@2$"},"inputs":{"description":"MicroBuild OptProf Plugin inputs","properties":{"commitID":{"type":"string","description":"Commit ID","ignoreCase":"key"},"optProfOutputPath":{"type":"string","description":"Optimization Data Output Path","ignoreCase":"key"},"skipRunOptimize":{"type":"boolean","description":"Generate Profile Data Without Optimization","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild OptProf Plugin\n\nInstalls and configures the MicroBuild OptProf plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildOptProfPlugin@6$"},"inputs":{"description":"MicroBuild OptProf Plugin inputs","properties":{"ProfilingInputsDropName":{"type":"string","description":"Profiling Inputs Drop Name","ignoreCase":"key"},"GeneratePropsFile":{"type":"boolean","description":"Generate .props File","ignoreCase":"key"},"PropsPath":{"type":"string","description":".props File Path","ignoreCase":"key"},"ShouldSkipOptimize":{"type":"boolean","description":"Skip Optimization","ignoreCase":"key"},"OptimizationInputsLookupMethod":{"description":"Optimization Inputs Lookup Method","ignoreCase":"all","enum":["GitTag","DropPrefix","GitTagRepo","DropName"]},"DropNamePrefix":{"type":"string","description":"Drop Name Prefix","ignoreCase":"key"},"NumberCommitsToSearch":{"type":"string","description":"Number of Commits","ignoreCase":"key"},"GitTagProject":{"type":"string","description":"Project","ignoreCase":"key"},"GitTagRepo":{"type":"string","description":"Repository","ignoreCase":"key"},"GitTagBranch":{"type":"string","description":"Branch","ignoreCase":"key"},"OptimizationInputsDropName":{"type":"string","description":"Optimization Inputs Drop Name","ignoreCase":"key"},"OverrideOutputPath":{"type":"boolean","description":"Override Output Path","ignoreCase":"key"},"OptimizationOutputPath":{"type":"string","description":"Output Path","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"AccessToken":{"type":"string","description":"Drop Service Access Token","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild OptProf Plugin\n\nInstalls and configures the MicroBuild OptProf plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildOptProfPlugin@4$"},"inputs":{"description":"MicroBuild OptProf Plugin inputs","properties":{"optimizationInputsDropName":{"type":"string","description":"OptimizationInputs Drop Name","ignoreCase":"key"},"optimizationInputsDropNamePrefix":{"type":"string","description":"OptimizationInputs Drop Name Prefix","ignoreCase":"key"},"optProfOutputPath":{"type":"string","description":"Optimization Data Output Path","ignoreCase":"key"},"getDropNameByDrop":{"type":"boolean","description":"Get OptimizationInputs Drop by Querying the Azure DevOps Drop Directly.","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild OptProf Plugin\n\nInstalls and configures the MicroBuild OptProf plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildOptProfPlugin@5$"},"inputs":{"description":"MicroBuild OptProf Plugin inputs","properties":{"ProfilingInputsDropName":{"type":"string","description":"Profiling Inputs Drop Name","ignoreCase":"key"},"GeneratePropsFile":{"type":"boolean","description":"Generate .props File","ignoreCase":"key"},"PropsPath":{"type":"string","description":".props File Path","ignoreCase":"key"},"ShouldSkipOptimize":{"type":"boolean","description":"Skip Optimization","ignoreCase":"key"},"OptimizationInputsLookupMethod":{"description":"Optimization Inputs Lookup Method","ignoreCase":"all","enum":["GitTag","DropPrefix","GitTagRepo","DropName"]},"DropNamePrefix":{"type":"string","description":"Drop Name Prefix","ignoreCase":"key"},"GitTagProject":{"type":"string","description":"Project","ignoreCase":"key"},"GitTagRepo":{"type":"string","description":"Repository","ignoreCase":"key"},"GitTagBranch":{"type":"string","description":"Branch","ignoreCase":"key"},"OptimizationInputsDropName":{"type":"string","description":"Optimization Inputs Drop Name","ignoreCase":"key"},"OverrideOutputPath":{"type":"boolean","description":"Override Output Path","ignoreCase":"key"},"OptimizationOutputPath":{"type":"string","description":"Output Path","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild OptProf Plugin\n\nInstalls and configures the MicroBuild OptProf plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildOptProfPlugin@1$"},"inputs":{"description":"MicroBuild OptProf Plugin inputs","properties":{"commitID":{"type":"string","description":"Commit ID","ignoreCase":"key"},"optProfOutputPath":{"type":"string","description":"Optimization Data Output Path","ignoreCase":"key"},"skipRunOptimize":{"type":"boolean","description":"Generate Profile Data Without Optimization","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Xcode Build\n\nBuild an Xcode workspace on Mac OS","ignoreCase":"value","pattern":"^Xcode@2$"},"inputs":{"description":"Xcode Build inputs","properties":{"actions":{"type":"string","description":"Actions","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"sdk":{"type":"string","description":"SDK","ignoreCase":"key"},"xcWorkspacePath":{"type":"string","description":"Workspace/Project Path","ignoreCase":"key"},"scheme":{"type":"string","description":"Scheme","ignoreCase":"key"},"packageApp":{"type":"boolean","description":"Create App Package","ignoreCase":"key"},"packageTool":{"description":"Create Package (IPA) using","ignoreCase":"all","enum":["xcrun","xcodebuild"]},"archivePath":{"type":"string","description":"Archive Path","ignoreCase":"key"},"exportPath":{"type":"string","description":"Export Path","ignoreCase":"key"},"exportOptions":{"description":"Export Options","ignoreCase":"all","enum":["auto","plist","specify"]},"exportMethod":{"type":"string","description":"Export Method","ignoreCase":"key"},"exportTeamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"exportOptionsPlist":{"type":"string","description":"Export Options Plist","ignoreCase":"key"},"xcode8AutomaticSigning":{"type":"boolean","description":"Automatic Signing","ignoreCase":"key"},"teamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"signMethod":{"description":"Override Using","ignoreCase":"all","enum":["file","id"]},"iosSigningIdentity":{"type":"string","description":"Signing Identity","ignoreCase":"key"},"unlockDefaultKeychain":{"type":"boolean","description":"Unlock Default Keychain","ignoreCase":"key"},"defaultKeychainPassword":{"type":"string","description":"Default Keychain Password","ignoreCase":"key"},"provProfileUuid":{"type":"string","description":"Provisioning Profile UUID","ignoreCase":"key"},"p12":{"type":"string","description":"P12 Certificate File","ignoreCase":"key"},"p12pwd":{"type":"string","description":"P12 Password","ignoreCase":"key"},"provProfile":{"type":"string","description":"Provisioning Profile File","ignoreCase":"key"},"removeProfile":{"type":"boolean","description":"Remove Profile After Build","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"cwd":{"type":"string","description":"Working Directory","ignoreCase":"key"},"outputPattern":{"type":"string","description":"Output Directory","ignoreCase":"key"},"xcodeDeveloperDir":{"type":"string","description":"Xcode Developer Path","ignoreCase":"key"},"useXcpretty":{"type":"boolean","description":"Use xcpretty","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to VSTS/TFS","ignoreCase":"key"},"useXctool":{"type":"boolean","description":"Use xctool","ignoreCase":"key"},"xctoolReporter":{"type":"string","description":"xctool Test Reporter Format","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Xcode\n\nBuild, test, or archive an Xcode workspace on macOS. Optionally package an app.","ignoreCase":"value","pattern":"^Xcode@5$"},"inputs":{"description":"Xcode inputs","properties":{"actions":{"type":"string","description":"Actions","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"sdk":{"type":"string","description":"SDK","ignoreCase":"key"},"xcWorkspacePath":{"type":"string","description":"Workspace or project path","ignoreCase":"key"},"scheme":{"type":"string","description":"Scheme","ignoreCase":"key"},"xcodeVersion":{"description":"Xcode version","ignoreCase":"all","enum":["8","9","10","11","12","13","default","specifyPath"]},"xcodeDeveloperDir":{"type":"string","description":"Xcode developer path","ignoreCase":"key"},"packageApp":{"type":"boolean","description":"Create app package","ignoreCase":"key"},"archivePath":{"type":"string","description":"Archive path","ignoreCase":"key"},"exportPath":{"type":"string","description":"Export path","ignoreCase":"key"},"exportOptions":{"description":"Export options","ignoreCase":"all","enum":["auto","plist","specify"]},"exportMethod":{"type":"string","description":"Export method","ignoreCase":"key"},"exportTeamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"exportOptionsPlist":{"type":"string","description":"Export options plist","ignoreCase":"key"},"exportArgs":{"type":"string","description":"Export arguments","ignoreCase":"key"},"signingOption":{"description":"Signing style","ignoreCase":"all","enum":["nosign","default","manual","auto"]},"signingIdentity":{"type":"string","description":"Signing identity","ignoreCase":"key"},"provisioningProfileUuid":{"type":"string","description":"Provisioning profile UUID","ignoreCase":"key"},"provisioningProfileName":{"type":"string","description":"Provisioning profile name","ignoreCase":"key"},"teamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"destinationPlatformOption":{"description":"Destination platform","ignoreCase":"all","enum":["default","iOS","tvOS","macOS","custom"]},"destinationPlatform":{"type":"string","description":"Custom destination platform","ignoreCase":"key"},"destinationTypeOption":{"description":"Destination type","ignoreCase":"all","enum":["simulators","devices"]},"destinationSimulators":{"type":"string","description":"Simulator","ignoreCase":"key"},"destinationDevices":{"type":"string","description":"Device","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"useXcpretty":{"type":"boolean","description":"Use xcpretty","ignoreCase":"key"},"xcprettyArgs":{"type":"string","description":"Xcpretty arguments","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish test results to Azure Pipelines","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Xcode Build\n\nBuild an Xcode workspace on macOS","ignoreCase":"value","pattern":"^Xcode@3$"},"inputs":{"description":"Xcode Build inputs","properties":{"actions":{"type":"string","description":"Actions","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"sdk":{"type":"string","description":"SDK","ignoreCase":"key"},"xcWorkspacePath":{"type":"string","description":"Workspace/Project Path","ignoreCase":"key"},"scheme":{"type":"string","description":"Scheme","ignoreCase":"key"},"packageApp":{"type":"boolean","description":"Create App Package","ignoreCase":"key"},"archivePath":{"type":"string","description":"Archive Path","ignoreCase":"key"},"exportPath":{"type":"string","description":"Export Path","ignoreCase":"key"},"exportOptions":{"description":"Export Options","ignoreCase":"all","enum":["auto","plist","specify"]},"exportMethod":{"type":"string","description":"Export Method","ignoreCase":"key"},"exportTeamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"exportOptionsPlist":{"type":"string","description":"Export Options Plist","ignoreCase":"key"},"exportArgs":{"type":"string","description":"Export Arguments","ignoreCase":"key"},"xcode8AutomaticSigning":{"type":"boolean","description":"Automatic Signing","ignoreCase":"key"},"teamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"signMethod":{"description":"Override Using","ignoreCase":"all","enum":["file","id"]},"iosSigningIdentity":{"type":"string","description":"Signing Identity","ignoreCase":"key"},"unlockDefaultKeychain":{"type":"boolean","description":"Unlock Default Keychain","ignoreCase":"key"},"defaultKeychainPassword":{"type":"string","description":"Default Keychain Password","ignoreCase":"key"},"provProfileUuid":{"type":"string","description":"Provisioning Profile UUID","ignoreCase":"key"},"p12":{"type":"string","description":"P12 Certificate File","ignoreCase":"key"},"p12pwd":{"type":"string","description":"P12 Password","ignoreCase":"key"},"provProfile":{"type":"string","description":"Provisioning Profile File","ignoreCase":"key"},"removeProfile":{"type":"boolean","description":"Remove Profile After Build","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"cwd":{"type":"string","description":"Working Directory","ignoreCase":"key"},"outputPattern":{"type":"string","description":"Output Directory","ignoreCase":"key"},"xcodeDeveloperDir":{"type":"string","description":"Xcode Developer Path","ignoreCase":"key"},"useXcpretty":{"type":"boolean","description":"Use xcpretty","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to VSTS/TFS","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Xcode\n\nBuild, test, or archive an Xcode workspace on macOS. Optionally package an app.","ignoreCase":"value","pattern":"^Xcode@4$"},"inputs":{"description":"Xcode inputs","properties":{"actions":{"type":"string","description":"Actions","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"sdk":{"type":"string","description":"SDK","ignoreCase":"key"},"xcWorkspacePath":{"type":"string","description":"Workspace or project path","ignoreCase":"key"},"scheme":{"type":"string","description":"Scheme","ignoreCase":"key"},"xcodeVersion":{"description":"Xcode version","ignoreCase":"all","enum":["8","9","default","specifyPath"]},"xcodeDeveloperDir":{"type":"string","description":"Xcode developer path","ignoreCase":"key"},"packageApp":{"type":"boolean","description":"Create app package","ignoreCase":"key"},"archivePath":{"type":"string","description":"Archive path","ignoreCase":"key"},"exportPath":{"type":"string","description":"Export path","ignoreCase":"key"},"exportOptions":{"description":"Export options","ignoreCase":"all","enum":["auto","plist","specify"]},"exportMethod":{"type":"string","description":"Export method","ignoreCase":"key"},"exportTeamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"exportOptionsPlist":{"type":"string","description":"Export options plist","ignoreCase":"key"},"exportArgs":{"type":"string","description":"Export arguments","ignoreCase":"key"},"signingOption":{"description":"Signing style","ignoreCase":"all","enum":["nosign","default","manual","auto"]},"signingIdentity":{"type":"string","description":"Signing identity","ignoreCase":"key"},"provisioningProfileUuid":{"type":"string","description":"Provisioning profile UUID","ignoreCase":"key"},"teamId":{"type":"string","description":"Team ID","ignoreCase":"key"},"destinationPlatformOption":{"description":"Destination platform","ignoreCase":"all","enum":["default","iOS","tvOS","macOS","custom"]},"destinationPlatform":{"type":"string","description":"Custom destination platform","ignoreCase":"key"},"destinationTypeOption":{"description":"Destination type","ignoreCase":"all","enum":["simulators","devices"]},"destinationSimulators":{"type":"string","description":"Simulator","ignoreCase":"key"},"destinationDevices":{"type":"string","description":"Device","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"outputPattern":{"type":"string","description":"Output directory","ignoreCase":"key"},"useXcpretty":{"type":"boolean","description":"Use xcpretty","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish test results to VSTS/TFS","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"NuGet publisher\n\nDeprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","ignoreCase":"value","pattern":"^NuGetPublisher@0$"},"inputs":{"description":"NuGet publisher inputs","properties":{"searchPattern":{"type":"string","description":"Path/Pattern to nupkg","ignoreCase":"key"},"nuGetFeedType":{"description":"Feed type","ignoreCase":"all","enum":["external","internal"]},"connectedServiceName":{"type":"string","description":"NuGet Service Connection","ignoreCase":"key"},"feedName":{"type":"string","description":"Internal Feed URL","ignoreCase":"key"},"nuGetAdditionalArgs":{"type":"string","description":"NuGet Arguments","ignoreCase":"key"},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["-","Quiet","Normal","Detailed"]},"nuGetVersion":{"description":"NuGet Version","ignoreCase":"all","enum":["3.3.0","3.5.0.1829","4.0.0.2283","custom"]},"nuGetPath":{"type":"string","description":"Path to NuGet.exe","ignoreCase":"key"},"continueOnEmptyNupkgMatch":{"type":"boolean","description":"Continue if no packages match the \"Path/Pattern to nupkg\"","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"NuGetPublisher is deprecated - Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Version Assemblies\n\nUpdates the version number of the assemblies to match the build number","ignoreCase":"value","pattern":"^VersionAssemblies@2$"},"inputs":{"description":"Version Assemblies inputs","properties":{"sourcePath":{"type":"string","description":"Source Path","ignoreCase":"key"},"filePattern":{"type":"string","description":"File Pattern","ignoreCase":"key"},"versionSource":{"description":"Version Source","ignoreCase":"all","enum":["buildNumber","variable"]},"customNumberVariable":{"type":"string","description":"Variable to use","ignoreCase":"key"},"versionFormat":{"description":"Version Extract Pattern","ignoreCase":"all","enum":["fourParts","threeParts","custom"]},"customBuildRegex":{"type":"string","description":"Custom Regex Find Pattern","ignoreCase":"key"},"replaceVersionFormat":{"description":"Replace Pattern","ignoreCase":"all","enum":["fourParts","threeParts","custom"]},"customReplaceRegex":{"type":"string","description":"Custom Regex Replace Pattern","ignoreCase":"key"},"buildRegexIndex":{"type":"string","description":"Build Regex Group Index","ignoreCase":"key"},"replacePrefix":{"type":"string","description":"Prefix for Replacements","ignoreCase":"key"},"replacePostfix":{"type":"string","description":"Postfix for Replacements","ignoreCase":"key"},"failIfNoMatchFound":{"type":"boolean","description":"Fail If No Target Match Found","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Query work items\n\nExecute a work item query and check the number of items returned","ignoreCase":"value","pattern":"^queryWorkItems@0$"},"inputs":{"description":"Query work items inputs","properties":{"queryId":{"type":"string","description":"Query","ignoreCase":"key"},"maxThreshold":{"type":"string","description":"Upper threshold","ignoreCase":"key"},"minThreshold":{"type":"string","description":"Lower threshold","ignoreCase":"key"}},"additionalProperties":false,"required":["queryId"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild IBCMerge Plugin\n\nInstalls and configures the MicroBuild IBCMerge plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildIBCMergePlugin@1$"},"inputs":{"description":"MicroBuild IBCMerge Plugin inputs","properties":{"branch":{"description":"Branch","ignoreCase":"all","enum":["master","rel/preview","svc/d15svc","svc/d15rtwsvc","rel/d15rel","lab/d15prerel","lab/vsumain","lab/vscore.dev","lab/vscore","lab/vsuvscore"]},"BuildNumber":{"type":"string","description":"Build number","ignoreCase":"key"},"SubPath":{"type":"string","description":"Data subdirectory","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"},"ShouldSkipPartialNgen":{"type":"boolean","description":"Disable PartialNgen","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild IBCMerge Plugin\n\nInstalls and configures the MicroBuild IBCMerge plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildIBCMergePlugin@0$"},"inputs":{"description":"MicroBuild IBCMerge Plugin inputs","properties":{"branch":{"description":"Branch","ignoreCase":"all","enum":["master","rel/preview","svc/d15svc","svc/d15rtwsvc","rel/d15rel","lab/d15prerel","lab/vsumain","lab/vscore.dev","lab/vscore","lab/vsuvscore"]},"BuildNumber":{"type":"string","description":"Build number","ignoreCase":"key"},"SubPath":{"type":"string","description":"Data subdirectory","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Web App for Containers\n\nDeploy containers to Azure App Service","ignoreCase":"value","pattern":"^AzureWebAppContainer@1$"},"inputs":{"description":"Azure Web App for Containers inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"appName":{"type":"string","description":"App name","ignoreCase":"key"},"deployToSlotOrASE":{"type":"boolean","description":"Deploy to Slot or App Service Environment","ignoreCase":"key"},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"slotName":{"type":"string","description":"Slot","ignoreCase":"key"},"containers":{"type":"string","description":"Image name","ignoreCase":"key","aliases":["imageName"]},"multicontainerConfigFile":{"type":"string","description":"Configuration File","ignoreCase":"key"},"containerCommand":{"type":"string","description":"Startup command ","ignoreCase":"key"},"appSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"configurationStrings":{"type":"string","description":"Configuration settings","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","appName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"SQL Server database deploy\n\nDeploy a SQL Server database using DACPAC or SQL scripts","ignoreCase":"value","pattern":"^SqlDacpacDeploymentOnMachineGroup@0$"},"inputs":{"description":"SQL Server database deploy inputs","properties":{"TaskType":{"description":"Deploy SQL Using","ignoreCase":"all","enum":["dacpac","sqlQuery","sqlInline"]},"DacpacFile":{"type":"string","description":"DACPAC File","ignoreCase":"key"},"SqlFile":{"type":"string","description":"Sql File","ignoreCase":"key"},"ExecuteInTransaction":{"type":"boolean","description":"Execute within a transaction","ignoreCase":"key"},"ExclusiveLock":{"type":"boolean","description":"Acquire an exclusive app lock while executing script(s)","ignoreCase":"key"},"AppLockName":{"type":"string","description":"App lock name","ignoreCase":"key"},"InlineSql":{"type":"string","description":"Inline Sql","ignoreCase":"key"},"TargetMethod":{"description":"Specify SQL Using","ignoreCase":"all","enum":["server","connectionString","publishProfile"]},"ServerName":{"type":"string","description":"Server Name","ignoreCase":"key"},"DatabaseName":{"type":"string","description":"Database Name","ignoreCase":"key"},"AuthScheme":{"description":"Authentication","ignoreCase":"all","enum":["windowsAuthentication","sqlServerAuthentication"]},"SqlUsername":{"type":"string","description":"SQL User name","ignoreCase":"key"},"SqlPassword":{"type":"string","description":"SQL Password","ignoreCase":"key"},"ConnectionString":{"type":"string","description":"Connection String","ignoreCase":"key"},"PublishProfile":{"type":"string","description":"Publish Profile","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"},"AdditionalArgumentsSql":{"type":"string","description":"Additional Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Cache (Beta)\n\nCache files between runs","ignoreCase":"value","pattern":"^CacheBeta@1$"},"inputs":{"description":"Cache (Beta) inputs","properties":{"key":{"type":"string","description":"Key","ignoreCase":"key"},"path":{"type":"string","description":"Path","ignoreCase":"key"},"cacheHitVar":{"type":"string","description":"Cache hit variable","ignoreCase":"key"},"restoreKeys":{"type":"string","description":"Additional restore key prefixes","ignoreCase":"key"}},"additionalProperties":false,"required":["key","path"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Cache\n\nCache files between runs","ignoreCase":"value","pattern":"^Cache@2$"},"inputs":{"description":"Cache inputs","properties":{"key":{"type":"string","description":"Key","ignoreCase":"key"},"path":{"type":"string","description":"Path","ignoreCase":"key"},"cacheHitVar":{"type":"string","description":"Cache hit variable","ignoreCase":"key"},"restoreKeys":{"type":"string","description":"Additional restore key prefixes","ignoreCase":"key"}},"additionalProperties":false,"required":["key","path"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Cache (Beta)\n\nCache files between runs","ignoreCase":"value","pattern":"^CacheBeta@0$"},"inputs":{"description":"Cache (Beta) inputs","properties":{"key":{"type":"string","description":"Key","ignoreCase":"key"},"path":{"type":"string","description":"Path","ignoreCase":"key"},"cacheHitVar":{"type":"string","description":"Cache hit variable","ignoreCase":"key"}},"additionalProperties":false,"required":["key","path"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild FXCop Plugin\n\nInstalls and configures the MicroBuild FXCop plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildFXCopPlugin@2$"},"inputs":{"description":"MicroBuild FXCop Plugin inputs","properties":{"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"CMake\n\nBuild with the CMake cross-platform build system","ignoreCase":"value","pattern":"^CMake@1$"},"inputs":{"description":"CMake inputs","properties":{"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"cmakeArgs":{"type":"string","description":"Arguments","ignoreCase":"key"},"runInsideShell":{"type":"boolean","description":"Run cmake command inside shell","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"App Center test\n\nTest app packages with Visual Studio App Center","ignoreCase":"value","pattern":"^AppCenterTest@1$"},"inputs":{"description":"App Center test inputs","properties":{"appFile":{"type":"string","description":"Binary application file path","ignoreCase":"key","aliases":["app"]},"artifactsDirectory":{"type":"string","description":"Artifacts directory","ignoreCase":"key","aliases":["artifactsDir"]},"prepareTests":{"type":"boolean","description":"Prepare tests","ignoreCase":"key","aliases":["enablePrepare"]},"frameworkOption":{"description":"Test framework","ignoreCase":"all","enum":["appium","espresso","calabash","uitest","xcuitest"],"aliases":["framework"]},"appiumBuildDirectory":{"type":"string","description":"Build directory","ignoreCase":"key","aliases":["appiumBuildDir"]},"espressoBuildDirectory":{"type":"string","description":"Build directory","ignoreCase":"key","aliases":["espressoBuildDir"]},"espressoTestApkFile":{"type":"string","description":"Test APK path","ignoreCase":"key","aliases":["espressoTestApkPath"]},"calabashProjectDirectory":{"type":"string","description":"Project directory","ignoreCase":"key","aliases":["calabashProjectDir"]},"calabashConfigFile":{"type":"string","description":"Cucumber config file","ignoreCase":"key"},"calabashProfile":{"type":"string","description":"Profile to run","ignoreCase":"key"},"calabashSkipConfigCheck":{"type":"boolean","description":"Skip Configuration Check","ignoreCase":"key"},"uiTestBuildDirectory":{"type":"string","description":"Build directory","ignoreCase":"key","aliases":["uitestBuildDir"]},"uitestStorePath":{"type":"string","description":"Store file","ignoreCase":"key"},"uiTestStorePassword":{"type":"string","description":"Store password","ignoreCase":"key","aliases":["uitestStorePass"]},"uitestKeyAlias":{"type":"string","description":"Key alias","ignoreCase":"key"},"uiTestKeyPassword":{"type":"string","description":"Key password","ignoreCase":"key","aliases":["uitestKeyPass"]},"uiTestToolsDirectory":{"type":"string","description":"Test tools directory","ignoreCase":"key","aliases":["uitestToolsDir"]},"signInfo":{"type":"string","description":"Signing information","ignoreCase":"key"},"xcUITestBuildDirectory":{"type":"string","description":"Build directory","ignoreCase":"key","aliases":["xcuitestBuildDir"]},"xcUITestIpaFile":{"type":"string","description":"Test IPA path","ignoreCase":"key","aliases":["xcuitestTestIpaPath"]},"prepareOptions":{"type":"string","description":"Additional options","ignoreCase":"key","aliases":["prepareOpts"]},"runTests":{"type":"boolean","description":"Run tests","ignoreCase":"key","aliases":["enableRun"]},"credentialsOption":{"description":"Authentication method","ignoreCase":"all","enum":["serviceEndpoint","inputs"],"aliases":["credsType"]},"serverEndpoint":{"type":"string","description":"App Center service connection","ignoreCase":"key"},"username":{"type":"string","description":"App Center username","ignoreCase":"key"},"password":{"type":"string","description":"App Center password","ignoreCase":"key"},"appSlug":{"type":"string","description":"App slug","ignoreCase":"key"},"devices":{"type":"string","description":"Devices","ignoreCase":"key"},"series":{"type":"string","description":"Test series","ignoreCase":"key"},"dsymDirectory":{"type":"string","description":"dSYM directory","ignoreCase":"key","aliases":["dsymDir"]},"localeOption":{"description":"System language","ignoreCase":"all","enum":["da_DK","nl_NL","en_GB","en_US","fr_FR","de_DE","ja_JP","ru_RU","es_MX","es_ES","user"],"aliases":["locale"]},"userDefinedLocale":{"type":"string","description":"Other locale","ignoreCase":"key"},"loginOptions":{"type":"string","description":"Additional options for login","ignoreCase":"key","aliases":["loginOpts"]},"runOptions":{"type":"string","description":"Additional options for run","ignoreCase":"key","aliases":["runOpts"]},"skipWaitingForResults":{"type":"boolean","description":"Do not wait for test result","ignoreCase":"key","aliases":["async"]},"cliFile":{"type":"string","description":"App Center CLI location","ignoreCase":"key","aliases":["cliLocationOverride"]},"showDebugOutput":{"type":"boolean","description":"Enable debug output","ignoreCase":"key","aliases":["debug"]}},"additionalProperties":false,"required":["appFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Mobile Center Test\n\nTest mobile app packages with Visual Studio Mobile Center.","ignoreCase":"value","pattern":"^VSMobileCenterTest@0$"},"inputs":{"description":"Mobile Center Test inputs","properties":{"app":{"type":"string","description":"Binary Application File Path","ignoreCase":"key"},"artifactsDir":{"type":"string","description":"Artifacts Directory","ignoreCase":"key"},"enablePrepare":{"type":"boolean","description":"Prepare Tests","ignoreCase":"key"},"framework":{"description":"Test Framework","ignoreCase":"all","enum":["appium","espresso","calabash","uitest","xcuitest"]},"appiumBuildDir":{"type":"string","description":"Build Directory","ignoreCase":"key"},"espressoBuildDir":{"type":"string","description":"Build Directory","ignoreCase":"key"},"espressoTestApkPath":{"type":"string","description":"Test APK Path","ignoreCase":"key"},"calabashProjectDir":{"type":"string","description":"Project Directory","ignoreCase":"key"},"calabashConfigFile":{"type":"string","description":"Cucumber Config File","ignoreCase":"key"},"calabashProfile":{"type":"string","description":"Profile to run","ignoreCase":"key"},"calabashSkipConfigCheck":{"type":"boolean","description":"Skip Configuration Check","ignoreCase":"key"},"uitestBuildDir":{"type":"string","description":"Build Directory","ignoreCase":"key"},"uitestStoreFile":{"type":"string","description":"Store File","ignoreCase":"key"},"uitestStorePass":{"type":"string","description":"Store Password","ignoreCase":"key"},"uitestKeyAlias":{"type":"string","description":"Key Alias","ignoreCase":"key"},"uitestKeyPass":{"type":"string","description":"Key Password","ignoreCase":"key"},"uitestToolsDir":{"type":"string","description":"Test Tools Directory","ignoreCase":"key"},"signInfo":{"type":"string","description":"Signing Information","ignoreCase":"key"},"xcuitestBuildDir":{"type":"string","description":"Build Directory","ignoreCase":"key"},"xcuitestTestIpaPath":{"type":"string","description":"Test IPA Path","ignoreCase":"key"},"prepareOpts":{"type":"string","description":"Additional Options","ignoreCase":"key"},"enableRun":{"type":"boolean","description":"Run Tests","ignoreCase":"key"},"credsType":{"description":"Authentication Method","ignoreCase":"all","enum":["serviceEndpoint","inputs"]},"serverEndpoint":{"type":"string","description":"Mobile Center Connection","ignoreCase":"key"},"username":{"type":"string","description":"Mobile Center Username","ignoreCase":"key"},"password":{"type":"string","description":"Mobile Center Password","ignoreCase":"key"},"appSlug":{"type":"string","description":"App Slug","ignoreCase":"key"},"devices":{"type":"string","description":"Devices","ignoreCase":"key"},"series":{"type":"string","description":"Test Series","ignoreCase":"key"},"dsymDir":{"type":"string","description":"dSYM Directory","ignoreCase":"key"},"locale":{"description":"System Language","ignoreCase":"all","enum":["da_DK","nl_NL","en_GB","en_US","fr_FR","de_DE","ja_JP","ru_RU","es_MX","es_ES","user"]},"userDefinedLocale":{"type":"string","description":"Other Locale","ignoreCase":"key"},"loginOpts":{"type":"string","description":"Addtional Options for Login","ignoreCase":"key"},"runOpts":{"type":"string","description":"Additional Options for Run","ignoreCase":"key"},"async":{"type":"boolean","description":"Do not wait for test result","ignoreCase":"key"},"cliLocationOverride":{"type":"string","description":"mobile-center CLI Location","ignoreCase":"key"},"debug":{"type":"boolean","description":"Enable Debug Output","ignoreCase":"key"}},"additionalProperties":false,"required":["app"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"EsrpClient Tool Installer\n\nFinds or Downloads and caches specified version spec of EsrpClient CLI and adds it to the PATH. In addition it will set esrpclient.toolpath and esrpclient.toolname task output variables which you can use in subsequent tasks or build scripts","ignoreCase":"value","pattern":"^EsrpClientTool@1$"},"inputs":{"description":"EsrpClient Tool Installer inputs","properties":{},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download secure file\n\nDownload a secure file to the agent machine","ignoreCase":"value","pattern":"^DownloadSecureFile@1$"},"inputs":{"description":"Download secure file inputs","properties":{"secureFile":{"type":"string","description":"Secure File","ignoreCase":"key"},"retryCount":{"type":"string","description":"Retry Count","ignoreCase":"key"},"socketTimeout":{"type":"string","description":"Socket Timeout","ignoreCase":"key"}},"additionalProperties":false,"required":["secureFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Use Ruby version\n\nUse the specified version of Ruby from the tool cache, optionally adding it to the PATH","ignoreCase":"value","pattern":"^UseRubyVersion@0$"},"inputs":{"description":"Use Ruby version inputs","properties":{"versionSpec":{"type":"string","description":"Version spec","ignoreCase":"key"},"addToPath":{"type":"boolean","description":"Add to PATH","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Grunt\n\nRun the Grunt JavaScript task runner","ignoreCase":"value","pattern":"^Grunt@0$"},"inputs":{"description":"Grunt inputs","properties":{"gruntFile":{"type":"string","description":"Grunt File Path","ignoreCase":"key"},"targets":{"type":"string","description":"Grunt Task(s)","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"gruntCli":{"type":"string","description":"grunt-cli location","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test Results Files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"enableCodeCoverage":{"type":"boolean","description":"Enable Code Coverage","ignoreCase":"key"},"testFramework":{"description":"Test Framework","ignoreCase":"all","enum":["Mocha","Jasmine"]},"srcFiles":{"type":"string","description":"Source Files","ignoreCase":"key"},"testFiles":{"type":"string","description":"Test Script Files","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure SQL Database deployment\n\nDeploy an Azure SQL Database using DACPAC or run scripts using SQLCMD","ignoreCase":"value","pattern":"^SqlAzureDacpacDeployment@1$"},"inputs":{"description":"Azure SQL Database deployment inputs","properties":{"azureConnectionType":{"description":"Azure Service Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameARM"],"aliases":["ConnectedServiceNameSelector"]},"azureClassicSubscription":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"AuthenticationType":{"description":"Authentication Type","ignoreCase":"all","enum":["server","aadAuthenticationPassword","aadAuthenticationIntegrated","connectionString","servicePrincipal"]},"ServerName":{"type":"string","description":"Azure SQL Server","ignoreCase":"key"},"DatabaseName":{"type":"string","description":"Database","ignoreCase":"key"},"SqlUsername":{"type":"string","description":"Login","ignoreCase":"key"},"SqlPassword":{"type":"string","description":"Password","ignoreCase":"key"},"aadSqlUsername":{"type":"string","description":"Login","ignoreCase":"key"},"aadSqlPassword":{"type":"string","description":"Password","ignoreCase":"key"},"ConnectionString":{"type":"string","description":"Connection String","ignoreCase":"key"},"deployType":{"description":"Deploy type","ignoreCase":"all","enum":["DacpacTask","SqlTask","InlineSqlTask"],"aliases":["TaskNameSelector"]},"DeploymentAction":{"description":"Action","ignoreCase":"all","enum":["Publish","Extract","Export","Import","Script","DriftReport","DeployReport"]},"DacpacFile":{"type":"string","description":"DACPAC File","ignoreCase":"key"},"BacpacFile":{"type":"string","description":"BACPAC File","ignoreCase":"key"},"SqlFile":{"type":"string","description":"SQL Script","ignoreCase":"key"},"SqlInline":{"type":"string","description":"Inline SQL Script","ignoreCase":"key"},"PublishProfile":{"type":"string","description":"Publish Profile","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional SqlPackage.exe Arguments","ignoreCase":"key"},"SqlAdditionalArguments":{"type":"string","description":"Additional Invoke-Sqlcmd Arguments","ignoreCase":"key"},"InlineAdditionalArguments":{"type":"string","description":"Additional Invoke-Sqlcmd Arguments","ignoreCase":"key"},"IpDetectionMethod":{"description":"Specify Firewall Rules Using","ignoreCase":"all","enum":["AutoDetect","IPAddressRange"]},"StartIpAddress":{"type":"string","description":"Start IP Address","ignoreCase":"key"},"EndIpAddress":{"type":"string","description":"End IP Address","ignoreCase":"key"},"DeleteFirewallRule":{"type":"boolean","description":"Delete Rule After Task Ends","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Container Structure Test\n\nUses container-structure-test (https://github.com/GoogleContainerTools/container-structure-test) to validate the structure of an image based on four categories of tests - command tests, file existence tests, file content tests and metadata tests","ignoreCase":"value","pattern":"^ContainerStructureTest@0$"},"inputs":{"description":"Container Structure Test inputs","properties":{"dockerRegistryServiceConnection":{"type":"string","description":"Docker registry service connection","ignoreCase":"key"},"repository":{"type":"string","description":"Container repository","ignoreCase":"key"},"tag":{"type":"string","description":"Tag","ignoreCase":"key"},"configFile":{"type":"string","description":"Config file path","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"failTaskOnFailedTests":{"type":"boolean","description":"Fail task if there are test failures","ignoreCase":"key"}},"additionalProperties":false,"required":["dockerRegistryServiceConnection","repository","configFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"[Deprecated] IIS Web App deployment\n\nDeploy using MSDeploy, then create/update websites and app pools","ignoreCase":"value","pattern":"^IISWebAppDeployment@1$"},"inputs":{"description":"[Deprecated] IIS Web App deployment inputs","properties":{"EnvironmentName":{"type":"string","description":"Machines","ignoreCase":"key"},"AdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"AdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"WinRMProtocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"TestCertificate":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"WebDeployPackage":{"type":"string","description":"Web Deploy Package","ignoreCase":"key"},"WebDeployParamFile":{"type":"string","description":"Web Deploy Parameter File","ignoreCase":"key"},"OverRideParams":{"type":"string","description":"Override Parameters","ignoreCase":"key"},"CreateWebSite":{"type":"boolean","description":"Create or Update Website","ignoreCase":"key"},"WebSiteName":{"type":"string","description":"Website Name","ignoreCase":"key"},"WebSitePhysicalPath":{"type":"string","description":"Physical Path","ignoreCase":"key"},"WebSitePhysicalPathAuth":{"description":"Physical Path Authentication","ignoreCase":"all","enum":["WebSiteUserPassThrough","WebSiteWindowsAuth"]},"WebSiteAuthUserName":{"type":"string","description":"User Name","ignoreCase":"key"},"WebSiteAuthUserPassword":{"type":"string","description":"Password","ignoreCase":"key"},"AddBinding":{"type":"boolean","description":"Add Binding","ignoreCase":"key"},"AssignDuplicateBinding":{"type":"boolean","description":"Assign Duplicate Binding","ignoreCase":"key"},"Protocol":{"description":"Protocol","ignoreCase":"all","enum":["https","http"]},"IPAddress":{"type":"string","description":"IP Address","ignoreCase":"key"},"Port":{"type":"string","description":"Port","ignoreCase":"key"},"ServerNameIndication":{"type":"boolean","description":"Server Name Indication Required","ignoreCase":"key"},"HostNameWithOutSNI":{"type":"string","description":"Host Name","ignoreCase":"key"},"HostNameWithHttp":{"type":"string","description":"Host Name","ignoreCase":"key"},"HostNameWithSNI":{"type":"string","description":"Host Name","ignoreCase":"key"},"SSLCertThumbPrint":{"type":"string","description":"SSL Certificate Thumb Print","ignoreCase":"key"},"CreateAppPool":{"type":"boolean","description":"Create or Update Application Pool","ignoreCase":"key"},"AppPoolName":{"type":"string","description":"Name","ignoreCase":"key"},"DotNetVersion":{"description":".NET Version","ignoreCase":"all","enum":["v4.0","v2.0","No Managed Code"]},"PipeLineMode":{"description":"Managed Pipeline Mode","ignoreCase":"all","enum":["Integrated","Classic"]},"AppPoolIdentity":{"description":"Identity","ignoreCase":"all","enum":["ApplicationPoolIdentity","LocalService","LocalSystem","NetworkService","SpecificUser"]},"AppPoolUsername":{"type":"string","description":"Username","ignoreCase":"key"},"AppPoolPassword":{"type":"string","description":"Password","ignoreCase":"key"},"AppCmdCommands":{"type":"string","description":"Additional AppCmd.exe Commands","ignoreCase":"key"},"DeployInParallel":{"type":"boolean","description":"Deploy in Parallel","ignoreCase":"key"},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineFilter":{"type":"string","description":"Deploy to Machines","ignoreCase":"key"}},"additionalProperties":false,"required":["EnvironmentName","WebDeployPackage"]}},"deprecationMessage":"IISWebAppDeployment is deprecated - Deploy using MSDeploy, then create/update websites and app pools","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Cloud-based load test\n\nRun a load test in the cloud with Azure Pipelines","ignoreCase":"value","pattern":"^CloudLoadTest@1$"},"inputs":{"description":"Cloud-based load test inputs","properties":{"connectedServiceName":{"type":"string","description":"Azure Pipelines Connection","ignoreCase":"key"},"TestDrop":{"type":"string","description":"Load test files folder","ignoreCase":"key"},"LoadTest":{"type":"string","description":"Load test file","ignoreCase":"key"},"activeRunSettings":{"description":"Active Run Settings","ignoreCase":"all","enum":["useFile","changeActive"]},"runSettingName":{"type":"string","description":"Specify the name of the Run Settings","ignoreCase":"key"},"testContextParameters":{"type":"string","description":"Override load test context parameters","ignoreCase":"key"},"TestSettings":{"type":"string","description":"Test settings file","ignoreCase":"key"},"ThresholdLimit":{"type":"string","description":"Number of permissible threshold violations","ignoreCase":"key"},"MachineType":{"description":"Run load test using","ignoreCase":"all","enum":["0","2"]},"resourceGroupName":{"type":"string","description":"Resource group rig","ignoreCase":"key"},"numOfSelfProvisionedAgents":{"type":"integer","description":"Number of agents to use","ignoreCase":"key"}},"additionalProperties":false,"required":["LoadTest"]}},"deprecationMessage":"CloudLoadTest is deprecated - Run a load test in the cloud with Azure Pipelines","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"1ES Hosted Pool Validation\n\nValidates that pipelines use secure and compliant Azure DevOps pools","ignoreCase":"value","pattern":"^1ESHostedPoolValidation@1$"},"inputs":{"description":"1ES Hosted Pool Validation inputs","properties":{},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download Artifact Services Drop -preview\n\nDownload from Artifact Services Drop - Internal Preview","ignoreCase":"value","pattern":"^artifactDropDownloadTask@0$"},"inputs":{"description":"Download Artifact Services Drop -preview inputs","properties":{"dropMetadataContainerName":{"type":"string","description":"Drop Metadata Container Name","ignoreCase":"key"},"dropMetadataContainerBuild":{"type":"string","description":"Source Build of Drop Metadata Container","ignoreCase":"key"},"dropServiceURI":{"type":"string","description":"Drop Service Endpoint","ignoreCase":"key"},"buildNumber":{"type":"string","description":"Drop Name","ignoreCase":"key"},"destinationPath":{"type":"string","description":"Download Destination Path","ignoreCase":"key"},"rootPaths":{"type":"string","description":"Root Paths","ignoreCase":"key"},"writable":{"type":"boolean","description":"Make cache writable","ignoreCase":"key"},"dropExePath":{"type":"string","description":"Override drop.exe Path","ignoreCase":"key"},"detailedLog":{"type":"boolean","description":"Verbose Logging","ignoreCase":"key"},"usePat":{"type":"boolean","description":"Use Personal Access Token","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Kubectl tool installer\n\nInstall Kubectl on agent machine","ignoreCase":"value","pattern":"^KubectlInstaller@0$"},"inputs":{"description":"Kubectl tool installer inputs","properties":{"kubectlVersion":{"type":"string","description":"Kubectl Version Spec","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Command line\n\nRun a command line script using Bash on Linux and macOS and cmd.exe on Windows","ignoreCase":"value","pattern":"^CmdLine@2$"},"inputs":{"description":"Command line inputs","properties":{"script":{"type":"string","description":"Script","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"},"failOnStderr":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Command Line\n\nRun a command line with arguments","ignoreCase":"value","pattern":"^CmdLine@1$"},"inputs":{"description":"Command Line inputs","properties":{"filename":{"type":"string","description":"Tool","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingFolder":{"type":"string","description":"Working folder","ignoreCase":"key"},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":["filename"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"NuGet command\n\nDeprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","ignoreCase":"value","pattern":"^NuGet@0$"},"inputs":{"description":"NuGet command inputs","properties":{"command":{"type":"string","description":"Command","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["command"]}},"deprecationMessage":"NuGet is deprecated - Deprecated: use the “NuGet” task instead. It works with the new Tool Installer framework so you can easily use new versions of NuGet without waiting for a task update, provides better support for authenticated feeds outside this organization/collection, and uses NuGet 4 by default.","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Container Build\n\nContainer Build Task","ignoreCase":"value","pattern":"^ContainerBuild@0$"},"inputs":{"description":"Container Build inputs","properties":{"dockerRegistryServiceConnection":{"type":"string","description":"Docker registry service connection","ignoreCase":"key"},"repository":{"type":"string","description":"Container repository","ignoreCase":"key"},"Dockerfile":{"type":"string","description":"Dockerfile","ignoreCase":"key"},"buildContext":{"type":"string","description":"Build context","ignoreCase":"key"},"tags":{"type":"string","description":"Tags","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Send Helix End Telemetry\n\nSend end job telemetry for .NET Core builds","ignoreCase":"value","pattern":"^SendEndTelemetry@0$"},"inputs":{"description":"Send Helix End Telemetry inputs","properties":{"maxRetries":{"type":"string","description":"Maximum number of retry attempts","ignoreCase":"key"},"retryDelay":{"type":"string","description":"Number of seconds to wait between retry attempts","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"NuGet Restore\n\nRestores NuGet packages in preparation for a Visual Studio Build step.","ignoreCase":"value","pattern":"^NuGetRestore@1$"},"inputs":{"description":"NuGet Restore inputs","properties":{"solution":{"type":"string","description":"Path to solution, packages.config, or project.json","ignoreCase":"key"},"selectOrConfig":{"description":"Feeds to use","ignoreCase":"all","enum":["select","config"]},"feed":{"type":"string","description":"Use packages from this Azure Artifacts feed","ignoreCase":"key"},"includeNuGetOrg":{"type":"boolean","description":"Use packages from NuGet.org","ignoreCase":"key"},"nugetConfigPath":{"type":"string","description":"Path to NuGet.config","ignoreCase":"key"},"noCache":{"type":"boolean","description":"Disable local cache","ignoreCase":"key"},"packagesDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key"},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["-","Quiet","Normal","Detailed"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"NuGet\n\nRestore, pack, or push NuGet packages, or run a NuGet command. Supports NuGet.org and authenticated feeds like Azure Artifacts and MyGet. Uses NuGet.exe and works with .NET Framework apps. For .NET Core and .NET Standard apps, use the .NET Core task.","ignoreCase":"value","pattern":"^NuGetCommand@2$"},"inputs":{"description":"NuGet inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["restore","pack","push","custom"]},"restoreSolution":{"type":"string","description":"Path to solution, packages.config, or project.json","ignoreCase":"key","aliases":["solution"]},"feedsToUse":{"description":"Feeds to use","ignoreCase":"all","enum":["select","config"],"aliases":["selectOrConfig"]},"vstsFeed":{"type":"string","description":"Use packages from this Azure Artifacts/TFS feed","ignoreCase":"key","aliases":["feedRestore"]},"includeNuGetOrg":{"type":"boolean","description":"Use packages from NuGet.org","ignoreCase":"key"},"nugetConfigPath":{"type":"string","description":"Path to NuGet.config","ignoreCase":"key"},"externalFeedCredentials":{"type":"string","description":"Credentials for feeds outside this organization/collection","ignoreCase":"key","aliases":["externalEndpoints"]},"noCache":{"type":"boolean","description":"Disable local cache","ignoreCase":"key"},"disableParallelProcessing":{"type":"boolean","description":"Disable parallel processing","ignoreCase":"key"},"restoreDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["packagesDirectory"]},"verbosityRestore":{"description":"Verbosity","ignoreCase":"all","enum":["Quiet","Normal","Detailed"]},"packagesToPush":{"type":"string","description":"Path to NuGet package(s) to publish","ignoreCase":"key","aliases":["searchPatternPush"]},"nuGetFeedType":{"description":"Target feed location","ignoreCase":"all","enum":["internal","external"]},"publishVstsFeed":{"type":"string","description":"Target feed","ignoreCase":"key","aliases":["feedPublish"]},"publishPackageMetadata":{"type":"boolean","description":"Publish pipeline metadata","ignoreCase":"key"},"allowPackageConflicts":{"type":"boolean","description":"Allow duplicates to be skipped","ignoreCase":"key"},"publishFeedCredentials":{"type":"string","description":"NuGet server","ignoreCase":"key","aliases":["externalEndpoint"]},"verbosityPush":{"description":"Verbosity","ignoreCase":"all","enum":["Quiet","Normal","Detailed"]},"packagesToPack":{"type":"string","description":"Path to csproj or nuspec file(s) to pack","ignoreCase":"key","aliases":["searchPatternPack"]},"configuration":{"type":"string","description":"Configuration to package","ignoreCase":"key","aliases":["configurationToPack"]},"packDestination":{"type":"string","description":"Package folder","ignoreCase":"key","aliases":["outputDir"]},"versioningScheme":{"description":"Automatic package versioning","ignoreCase":"all","enum":["off","byPrereleaseNumber","byEnvVar","byBuildNumber"]},"includeReferencedProjects":{"type":"boolean","description":"Include referenced projects","ignoreCase":"key"},"versionEnvVar":{"type":"string","description":"Environment variable","ignoreCase":"key"},"majorVersion":{"type":"string","description":"Major","ignoreCase":"key","aliases":["requestedMajorVersion"]},"minorVersion":{"type":"string","description":"Minor","ignoreCase":"key","aliases":["requestedMinorVersion"]},"patchVersion":{"type":"string","description":"Patch","ignoreCase":"key","aliases":["requestedPatchVersion"]},"packTimezone":{"description":"Time zone","ignoreCase":"all","enum":["utc","local"]},"includeSymbols":{"type":"boolean","description":"Create symbols package","ignoreCase":"key"},"toolPackage":{"type":"boolean","description":"Tool Package","ignoreCase":"key"},"buildProperties":{"type":"string","description":"Additional build properties","ignoreCase":"key"},"basePath":{"type":"string","description":"Base path","ignoreCase":"key"},"verbosityPack":{"description":"Verbosity","ignoreCase":"all","enum":["Quiet","Normal","Detailed"]},"arguments":{"type":"string","description":"Command and arguments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"NuGet Installer\n\nInstalls or restores missing NuGet packages. Use NuGetAuthenticate@0 task for latest capabilities.","ignoreCase":"value","pattern":"^NuGetInstaller@0$"},"inputs":{"description":"NuGet Installer inputs","properties":{"solution":{"type":"string","description":"Path to solution or packages.config","ignoreCase":"key"},"nugetConfigPath":{"type":"string","description":"Path to NuGet.config","ignoreCase":"key"},"restoreMode":{"description":"Installation type","ignoreCase":"all","enum":["restore","install"]},"noCache":{"type":"boolean","description":"Disable local cache","ignoreCase":"key"},"nuGetRestoreArgs":{"type":"string","description":"NuGet arguments","ignoreCase":"key"},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["-","Quiet","Normal","Detailed"]},"nuGetVersion":{"description":"NuGet Version","ignoreCase":"all","enum":["3.3.0","3.5.0.1829","4.0.0.2283","custom"]},"nuGetPath":{"type":"string","description":"Path to NuGet.exe","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"(deprecated) Docker Publish\n\nInvokes the VS Tools for Docker script with optional overrides","ignoreCase":"value","pattern":"^DockerPublish@0$"},"inputs":{"description":"(deprecated) Docker Publish inputs","properties":{"pathToPubxml":{"type":"string","description":"Path to Pubxml","ignoreCase":"key"},"pathToDockerfile":{"type":"string","description":"Path to Dockerfile","ignoreCase":"key"},"packOutput":{"type":"string","description":"Pack Output Path","ignoreCase":"key"},"serverUrl":{"type":"string","description":"Docker Server URL","ignoreCase":"key"},"imageName":{"type":"string","description":"Docker image name","ignoreCase":"key"},"buildOnly":{"type":"boolean","description":"Build only","ignoreCase":"key"},"hostPort":{"type":"string","description":"Host Port","ignoreCase":"key"},"containerPort":{"type":"string","description":"Container Port","ignoreCase":"key"},"runOptions":{"type":"string","description":"Run Options","ignoreCase":"key"},"appType":{"type":"string","description":"App Type","ignoreCase":"key"},"isWindowsContainer":{"type":"string","description":"Create Windows Container","ignoreCase":"key"},"authOptions":{"type":"string","description":"Auth Options","ignoreCase":"key"},"removeConflictingContainers":{"type":"string","description":"Remove Conflicting Containers","ignoreCase":"key"}},"additionalProperties":false,"required":["pathToDockerfile","packOutput"]}},"deprecationMessage":"DockerPublish is deprecated - Invokes the VS Tools for Docker script with optional overrides","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Delay\n\nDelay further execution of a workflow by a fixed time","ignoreCase":"value","pattern":"^Delay@1$"},"inputs":{"description":"Delay inputs","properties":{"delayForMinutes":{"type":"string","description":"Delay Time (minutes)","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Sign Mac Files\n\nSubmits Mac files to PRSS for signing","ignoreCase":"value","pattern":"^MicroBuildSignMacFiles@1$"},"inputs":{"description":"MicroBuild Sign Mac Files inputs","properties":{"SigningTarget":{"type":"string","description":"Folder or Zip or Dmg to Sign","ignoreCase":"key"},"SigningCert":{"description":"Signing Certificate","ignoreCase":"all","enum":["8001","8021","8003","8023","8020"]},"MacAppName":{"type":"string","description":"Mac Notarization App Name","ignoreCase":"key"},"SigningPluginSource":{"type":"string","description":"Signing Plugin Source","ignoreCase":"key"},"SigningPluginVersion":{"type":"string","description":"Signing Plugin Version","ignoreCase":"key"}},"additionalProperties":false,"required":["SigningTarget","SigningCert"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Sign Mac Files\n\nSubmits Mac files to PRSS for signing","ignoreCase":"value","pattern":"^MicroBuildSignMacFiles@0$"},"inputs":{"description":"MicroBuild Sign Mac Files inputs","properties":{"SigningTarget":{"type":"string","description":"Folder or Zip to Sign","ignoreCase":"key"},"SigningCert":{"description":"Signing Certificate","ignoreCase":"all","enum":["8001","8003"]},"SigningPluginSource":{"type":"string","description":"Signing Plugin Source","ignoreCase":"key"},"SigningPluginVersion":{"type":"string","description":"Signing Plugin Version","ignoreCase":"key"}},"additionalProperties":false,"required":["SigningTarget","SigningCert"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Xamarin.iOS\n\nBuild an iOS app with Xamarin on macOS","ignoreCase":"value","pattern":"^XamariniOS@2$"},"inputs":{"description":"Xamarin.iOS inputs","properties":{"solutionFile":{"type":"string","description":"Solution","ignoreCase":"key","aliases":["solution"]},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"clean":{"type":"boolean","description":"Clean","ignoreCase":"key"},"packageApp":{"type":"boolean","description":"Create app package","ignoreCase":"key"},"buildForSimulator":{"type":"boolean","description":"Build for iOS Simulator","ignoreCase":"key","aliases":["forSimulator"]},"runNugetRestore":{"type":"boolean","description":"Run NuGet restore","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"mdtoolFile":{"type":"string","description":"Build tool path","ignoreCase":"key","aliases":["buildToolLocation","mdtoolLocation"]},"signingIdentity":{"type":"string","description":"Signing identity","ignoreCase":"key","aliases":["iosSigningIdentity"]},"signingProvisioningProfileID":{"type":"string","description":"Provisioning profile UUID","ignoreCase":"key","aliases":["provProfileUuid"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Xamarin.iOS\n\nBuild an iOS app with Xamarin on macOS","ignoreCase":"value","pattern":"^XamariniOS@1$"},"inputs":{"description":"Xamarin.iOS inputs","properties":{"solutionFile":{"type":"string","description":"Solution","ignoreCase":"key","aliases":["solution"]},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"clean":{"type":"boolean","description":"Clean","ignoreCase":"key"},"packageApp":{"type":"boolean","description":"Create app package","ignoreCase":"key"},"buildForSimulator":{"type":"boolean","description":"Build for iOS Simulator","ignoreCase":"key","aliases":["forSimulator"]},"runNugetRestore":{"type":"boolean","description":"Run NuGet restore","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"buildToolOption":{"description":"Build tool","ignoreCase":"all","enum":["xbuild","msbuild"],"aliases":["buildTool"]},"mdtoolFile":{"type":"string","description":"Build tool path","ignoreCase":"key","aliases":["mdtoolLocation"]},"signingOption":{"description":"Override using","ignoreCase":"all","enum":["file","id"],"aliases":["signMethod"]},"signingIdentity":{"type":"string","description":"Signing identity","ignoreCase":"key","aliases":["iosSigningIdentity"]},"signingUnlockDefaultKeychain":{"type":"boolean","description":"Unlock default keychain","ignoreCase":"key","aliases":["unlockDefaultKeychain"]},"signingDefaultKeychainPassword":{"type":"string","description":"Default keychain password","ignoreCase":"key","aliases":["defaultKeychainPassword"]},"signingProvisioningProfileID":{"type":"string","description":"Provisioning profile UUID","ignoreCase":"key","aliases":["provProfileUuid"]},"signingP12File":{"type":"string","description":"P12 certificate file","ignoreCase":"key","aliases":["p12"]},"signingP12Password":{"type":"string","description":"P12 password","ignoreCase":"key","aliases":["p12pwd"]},"signingProvisioningProfileFile":{"type":"string","description":"Provisioning profile file","ignoreCase":"key","aliases":["provProfile"]},"signingRemoveProfile":{"type":"boolean","description":"Remove profile after build","ignoreCase":"key","aliases":["removeProfile"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Ref12 Analyze\n\nAnalyze repository and generate data files to enable semantic code browsing.","ignoreCase":"value","pattern":"^Ref12Analyze@0$"},"inputs":{"description":"Ref12 Analyze inputs","properties":{"codexoutputroot":{"type":"string","description":"Codex Output Root","ignoreCase":"key"},"workflowArguments":{"type":"string","description":"Workflow Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Publish test results\n\nPublish test results to Azure Pipelines","ignoreCase":"value","pattern":"^PublishTestResults@1$"},"inputs":{"description":"Publish test results inputs","properties":{"testRunner":{"description":"Test Result Format","ignoreCase":"all","enum":["JUnit","NUnit","VSTest","XUnit"]},"testResultsFiles":{"type":"string","description":"Test Results Files","ignoreCase":"key"},"mergeTestResults":{"type":"boolean","description":"Merge Test Results","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"platform":{"type":"string","description":"Platform","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"publishRunAttachments":{"type":"boolean","description":"Upload Test Attachments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Publish Test Results\n\nPublish test results to Azure Pipelines","ignoreCase":"value","pattern":"^PublishTestResults@2$"},"inputs":{"description":"Publish Test Results inputs","properties":{"testResultsFormat":{"description":"Test result format","ignoreCase":"all","enum":["JUnit","NUnit","VSTest","XUnit","CTest"],"aliases":["testRunner"]},"testResultsFiles":{"type":"string","description":"Test results files","ignoreCase":"key"},"searchFolder":{"type":"string","description":"Search folder","ignoreCase":"key"},"mergeTestResults":{"type":"boolean","description":"Merge test results","ignoreCase":"key"},"failTaskOnFailedTests":{"type":"boolean","description":"Fail if there are test failures","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"buildPlatform":{"type":"string","description":"Build Platform","ignoreCase":"key","aliases":["platform"]},"buildConfiguration":{"type":"string","description":"Build Configuration","ignoreCase":"key","aliases":["configuration"]},"publishRunAttachments":{"type":"boolean","description":"Upload test results files","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure file copy\n\nCopy files to Azure Blob Storage or virtual machines","ignoreCase":"value","pattern":"^AzureFileCopy@1$"},"inputs":{"description":"Azure file copy inputs","properties":{"SourcePath":{"type":"string","description":"Source","ignoreCase":"key"},"azureConnectionType":{"description":"Azure Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameARM"],"aliases":["ConnectedServiceNameSelector"]},"azureClassicSubscription":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"Destination":{"description":"Destination Type","ignoreCase":"all","enum":["AzureBlob","AzureVMs"]},"classicStorage":{"type":"string","description":"Classic Storage Account","ignoreCase":"key","aliases":["StorageAccount"]},"storage":{"type":"string","description":"RM Storage Account","ignoreCase":"key","aliases":["StorageAccountRM"]},"ContainerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"BlobPrefix":{"type":"string","description":"Blob Prefix","ignoreCase":"key"},"cloudService":{"type":"string","description":"Cloud Service","ignoreCase":"key","aliases":["EnvironmentName"]},"resourceGroup":{"type":"string","description":"Resource Group","ignoreCase":"key","aliases":["EnvironmentNameRM"]},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"},"vmsAdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"vmsAdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Destination Folder","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"},"enableCopyPrerequisites":{"type":"boolean","description":"Enable Copy Prerequisites","ignoreCase":"key"},"CopyFilesInParallel":{"type":"boolean","description":"Copy in Parallel","ignoreCase":"key"},"CleanTargetBeforeCopy":{"type":"boolean","description":"Clean Target","ignoreCase":"key"},"skipCACheck":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"outputStorageUri":{"type":"string","description":"Storage Container URI","ignoreCase":"key"},"outputStorageContainerSasToken":{"type":"string","description":"Storage Container SAS Token","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath","Destination"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure file copy\n\nCopy files to Azure Blob Storage or virtual machines","ignoreCase":"value","pattern":"^AzureFileCopy@2$"},"inputs":{"description":"Azure file copy inputs","properties":{"SourcePath":{"type":"string","description":"Source","ignoreCase":"key"},"azureConnectionType":{"description":"Azure Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameARM"],"aliases":["ConnectedServiceNameSelector"]},"azureClassicSubscription":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"Destination":{"description":"Destination Type","ignoreCase":"all","enum":["AzureBlob","AzureVMs"]},"classicStorage":{"type":"string","description":"Classic Storage Account","ignoreCase":"key","aliases":["StorageAccount"]},"storage":{"type":"string","description":"RM Storage Account","ignoreCase":"key","aliases":["StorageAccountRM"]},"ContainerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"BlobPrefix":{"type":"string","description":"Blob Prefix","ignoreCase":"key"},"cloudService":{"type":"string","description":"Cloud Service","ignoreCase":"key","aliases":["EnvironmentName"]},"resourceGroup":{"type":"string","description":"Resource Group","ignoreCase":"key","aliases":["EnvironmentNameRM"]},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"},"vmsAdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"vmsAdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Destination Folder","ignoreCase":"key"},"AdditionalArgumentsForBlobCopy":{"type":"string","description":"Optional Arguments (for uploading files to blob)","ignoreCase":"key"},"AdditionalArgumentsForVMCopy":{"type":"string","description":"Optional Arguments (for downloading files to VM)","ignoreCase":"key"},"enableCopyPrerequisites":{"type":"boolean","description":"Enable Copy Prerequisites","ignoreCase":"key"},"CopyFilesInParallel":{"type":"boolean","description":"Copy in Parallel","ignoreCase":"key"},"CleanTargetBeforeCopy":{"type":"boolean","description":"Clean Target","ignoreCase":"key"},"skipCACheck":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"outputStorageUri":{"type":"string","description":"Storage Container URI","ignoreCase":"key"},"outputStorageContainerSasToken":{"type":"string","description":"Storage Container SAS Token","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath","Destination"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure file copy\n\nCopy files to Azure Blob Storage or virtual machines","ignoreCase":"value","pattern":"^AzureFileCopy@3$"},"inputs":{"description":"Azure file copy inputs","properties":{"SourcePath":{"type":"string","description":"Source","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"Destination":{"description":"Destination Type","ignoreCase":"all","enum":["AzureBlob","AzureVMs"]},"storage":{"type":"string","description":"RM Storage Account","ignoreCase":"key","aliases":["StorageAccountRM"]},"ContainerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"BlobPrefix":{"type":"string","description":"Blob Prefix","ignoreCase":"key"},"resourceGroup":{"type":"string","description":"Resource Group","ignoreCase":"key","aliases":["EnvironmentNameRM"]},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"},"vmsAdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"vmsAdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Destination Folder","ignoreCase":"key"},"AdditionalArgumentsForBlobCopy":{"type":"string","description":"Optional Arguments (for uploading files to blob)","ignoreCase":"key"},"AdditionalArgumentsForVMCopy":{"type":"string","description":"Optional Arguments (for downloading files to VM)","ignoreCase":"key"},"enableCopyPrerequisites":{"type":"boolean","description":"Enable Copy Prerequisites","ignoreCase":"key"},"CopyFilesInParallel":{"type":"boolean","description":"Copy in Parallel","ignoreCase":"key"},"CleanTargetBeforeCopy":{"type":"boolean","description":"Clean Target","ignoreCase":"key"},"skipCACheck":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"outputStorageUri":{"type":"string","description":"Storage Container URI","ignoreCase":"key"},"outputStorageContainerSasToken":{"type":"string","description":"Storage Container SAS Token","ignoreCase":"key"},"sasTokenTimeOutInMinutes":{"type":"string","description":"SAS Token Expiration Period In Minutes","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath","azureSubscription","Destination","storage"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure file copy\n\nCopy files to Azure Blob Storage or virtual machines","ignoreCase":"value","pattern":"^AzureFileCopy@4$"},"inputs":{"description":"Azure file copy inputs","properties":{"SourcePath":{"type":"string","description":"Source","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceNameARM"]},"Destination":{"description":"Destination Type","ignoreCase":"all","enum":["AzureBlob","AzureVMs"]},"storage":{"type":"string","description":"RM Storage Account","ignoreCase":"key","aliases":["StorageAccountRM"]},"ContainerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"BlobPrefix":{"type":"string","description":"Blob Prefix","ignoreCase":"key"},"resourceGroup":{"type":"string","description":"Resource Group","ignoreCase":"key","aliases":["EnvironmentNameRM"]},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineNames":{"type":"string","description":"Filter Criteria","ignoreCase":"key"},"vmsAdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"vmsAdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Destination Folder","ignoreCase":"key"},"AdditionalArgumentsForBlobCopy":{"type":"string","description":"Optional Arguments (for uploading files to blob)","ignoreCase":"key"},"AdditionalArgumentsForVMCopy":{"type":"string","description":"Optional Arguments (for downloading files to VM)","ignoreCase":"key"},"sasTokenTimeOutInMinutes":{"type":"string","description":"SAS Token Expiration Period In Minutes","ignoreCase":"key"},"enableCopyPrerequisites":{"type":"boolean","description":"Enable Copy Prerequisites","ignoreCase":"key"},"CopyFilesInParallel":{"type":"boolean","description":"Copy in Parallel","ignoreCase":"key"},"CleanTargetBeforeCopy":{"type":"boolean","description":"Clean Target","ignoreCase":"key"},"skipCACheck":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"}},"additionalProperties":false,"required":["SourcePath","azureSubscription","Destination","storage"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Swix Plugin\n\nInstalls and configures the MicroBuild swix plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSwixPlugin@3$"},"inputs":{"description":"MicroBuild Swix Plugin inputs","properties":{"dropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"dropServiceUri":{"type":"string","description":"VSDrop Service Uri","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Swix Plugin\n\nInstalls and configures the MicroBuild swix plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSwixPlugin@4$"},"inputs":{"description":"MicroBuild Swix Plugin inputs","properties":{"dropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"dropServiceUri":{"type":"string","description":"VSDrop Service Uri","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Swix Plugin\n\nInstalls and configures the MicroBuild swix plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSwixPlugin@2$"},"inputs":{"description":"MicroBuild Swix Plugin inputs","properties":{"dropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"dropServiceUri":{"type":"string","description":"VSDrop Service Uri","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Swix Plugin\n\nInstalls and configures the MicroBuild swix plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildSwixPlugin@1$"},"inputs":{"description":"MicroBuild Swix Plugin inputs","properties":{"dropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"dropServiceUri":{"type":"string","description":"VSDrop Service Uri","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Index sources and publish symbols\n\nIndex your source code and publish symbols to a file share or Azure Artifacts symbol server","ignoreCase":"value","pattern":"^PublishSymbols@2$"},"inputs":{"description":"Index sources and publish symbols inputs","properties":{"SymbolsFolder":{"type":"string","description":"Path to symbols folder","ignoreCase":"key"},"SearchPattern":{"type":"string","description":"Search pattern","ignoreCase":"key"},"IndexSources":{"type":"boolean","description":"Index sources","ignoreCase":"key"},"PublishSymbols":{"type":"boolean","description":"Publish symbols","ignoreCase":"key"},"SymbolServerType":{"description":"Symbol server type","ignoreCase":"all","enum":[" ","TeamServices","FileShare"]},"SymbolsPath":{"type":"string","description":"Path to publish symbols","ignoreCase":"key"},"CompressSymbols":{"type":"boolean","description":"Compress symbols","ignoreCase":"key"},"IndexableFileFormats":{"description":"Symbol file formats to publish","ignoreCase":"all","enum":["Default","Pdb","SourceMap","All"]},"DetailedLog":{"type":"boolean","description":"Verbose logging","ignoreCase":"key"},"TreatNotIndexedAsWarning":{"type":"boolean","description":"Warn if not indexed","ignoreCase":"key"},"SymbolsMaximumWaitTime":{"type":"string","description":"Max wait time (min)","ignoreCase":"key"},"SymbolsProduct":{"type":"string","description":"Product","ignoreCase":"key"},"SymbolsVersion":{"type":"string","description":"Version","ignoreCase":"key"},"SymbolsArtifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Index Sources & Publish Symbols\n\nIndex your source code and publish symbols to a file share","ignoreCase":"value","pattern":"^PublishSymbols@1$"},"inputs":{"description":"Index Sources & Publish Symbols inputs","properties":{"SymbolsPath":{"type":"string","description":"Path to publish symbols","ignoreCase":"key"},"SearchPattern":{"type":"string","description":"Search pattern","ignoreCase":"key"},"SymbolsFolder":{"type":"string","description":"Path to symbols folder","ignoreCase":"key"},"SkipIndexing":{"type":"boolean","description":"Skip indexing","ignoreCase":"key"},"TreatNotIndexedAsWarning":{"type":"boolean","description":"Warn if not indexed","ignoreCase":"key"},"SymbolsMaximumWaitTime":{"type":"string","description":"Max wait time (min)","ignoreCase":"key"},"SymbolsProduct":{"type":"string","description":"Product","ignoreCase":"key"},"SymbolsVersion":{"type":"string","description":"Version","ignoreCase":"key"},"SymbolsArtifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Copy files over SSH\n\nCopy files or build artifacts to a remote machine over SSH","ignoreCase":"value","pattern":"^CopyFilesOverSSH@0$"},"inputs":{"description":"Copy files over SSH inputs","properties":{"sshEndpoint":{"type":"string","description":"SSH service connection","ignoreCase":"key"},"sourceFolder":{"type":"string","description":"Source folder","ignoreCase":"key"},"contents":{"type":"string","description":"Contents","ignoreCase":"key"},"targetFolder":{"type":"string","description":"Target folder","ignoreCase":"key"},"isWindowsOnTarget":{"type":"boolean","description":"Target machine running Windows","ignoreCase":"key"},"cleanTargetFolder":{"type":"boolean","description":"Clean target folder","ignoreCase":"key"},"readyTimeout":{"type":"string","description":"SSH handshake timeout","ignoreCase":"key"},"overwrite":{"type":"boolean","description":"Overwrite","ignoreCase":"key"},"failOnEmptySource":{"type":"boolean","description":"Fail if no files found to copy","ignoreCase":"key"},"flattenFolders":{"type":"boolean","description":"Flatten folders","ignoreCase":"key"}},"additionalProperties":false,"required":["sshEndpoint"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Gradle\n\nBuild using a Gradle wrapper script","ignoreCase":"value","pattern":"^Gradle@2$"},"inputs":{"description":"Gradle inputs","properties":{"gradleWrapperFile":{"type":"string","description":"Gradle wrapper","ignoreCase":"key","aliases":["wrapperScript"]},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"options":{"type":"string","description":"Options","ignoreCase":"key"},"tasks":{"type":"string","description":"Tasks","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test results files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"codeCoverageToolOption":{"description":"Code coverage tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class files directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageClassFilter":{"type":"string","description":"Class inclusion/exclusion filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail when code coverage results are missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"codeCoverageGradle5xOrHigher":{"type":"boolean","description":"Gradle version >= 5.x","ignoreCase":"key","aliases":["gradle5xOrHigher"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK version","ignoreCase":"all","enum":["default","1.11","1.10","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]},"gradleOptions":{"type":"string","description":"Set GRADLE_OPTS","ignoreCase":"key","aliases":["gradleOpts"]},"sonarQubeRunAnalysis":{"type":"boolean","description":"Run SonarQube or SonarCloud Analysis","ignoreCase":"key","aliases":["sqAnalysisEnabled"]},"sqGradlePluginVersionChoice":{"description":"SonarQube scanner for Gradle version","ignoreCase":"all","enum":["specify","build"]},"sonarQubeGradlePluginVersion":{"type":"string","description":"SonarQube scanner for Gradle plugin version","ignoreCase":"key","aliases":["sqGradlePluginVersion"]},"checkStyleRunAnalysis":{"type":"boolean","description":"Run Checkstyle","ignoreCase":"key","aliases":["checkstyleAnalysisEnabled"]},"findBugsRunAnalysis":{"type":"boolean","description":"Run FindBugs","ignoreCase":"key","aliases":["findbugsAnalysisEnabled"]},"pmdRunAnalysis":{"type":"boolean","description":"Run PMD","ignoreCase":"key","aliases":["pmdAnalysisEnabled"]},"spotBugsAnalysis":{"type":"boolean","description":"Run SpotBugs","ignoreCase":"key","aliases":["spotBugsAnalysisEnabled"]},"spotBugsGradlePluginVersionChoice":{"description":"Spotbugs plugin version","ignoreCase":"all","enum":["specify","build"]},"spotbugsGradlePluginVersion":{"type":"string","description":"Version number","ignoreCase":"key","aliases":["spotbugsGradlePluginVersion"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Gradle\n\nBuild using a Gradle wrapper script","ignoreCase":"value","pattern":"^Gradle@3$"},"inputs":{"description":"Gradle inputs","properties":{"gradleWrapperFile":{"type":"string","description":"Gradle wrapper","ignoreCase":"key","aliases":["wrapperScript"]},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"options":{"type":"string","description":"Options","ignoreCase":"key"},"tasks":{"type":"string","description":"Tasks","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test results files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"codeCoverageToolOption":{"description":"Code coverage tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class files directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageClassFilter":{"type":"string","description":"Class inclusion/exclusion filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail when code coverage results are missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"codeCoverageGradle5xOrHigher":{"type":"boolean","description":"Gradle version >= 5.x","ignoreCase":"key","aliases":["gradle5xOrHigher"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK version","ignoreCase":"all","enum":["default","1.11","1.10","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]},"gradleOptions":{"type":"string","description":"Set GRADLE_OPTS","ignoreCase":"key","aliases":["gradleOpts"]},"sonarQubeRunAnalysis":{"type":"boolean","description":"Run SonarQube or SonarCloud Analysis","ignoreCase":"key","aliases":["sqAnalysisEnabled"]},"sqGradlePluginVersionChoice":{"description":"SonarQube scanner for Gradle version","ignoreCase":"all","enum":["specify","build"]},"sonarQubeGradlePluginVersion":{"type":"string","description":"SonarQube scanner for Gradle plugin version","ignoreCase":"key","aliases":["sqGradlePluginVersion"]},"checkStyleRunAnalysis":{"type":"boolean","description":"Run Checkstyle","ignoreCase":"key","aliases":["checkstyleAnalysisEnabled"]},"findBugsRunAnalysis":{"type":"boolean","description":"Run FindBugs","ignoreCase":"key","aliases":["findbugsAnalysisEnabled"]},"pmdRunAnalysis":{"type":"boolean","description":"Run PMD","ignoreCase":"key","aliases":["pmdAnalysisEnabled"]},"spotBugsAnalysis":{"type":"boolean","description":"Run SpotBugs","ignoreCase":"key","aliases":["spotBugsAnalysisEnabled"]},"spotBugsGradlePluginVersionChoice":{"description":"Spotbugs plugin version","ignoreCase":"all","enum":["specify","build"]},"spotbugsGradlePluginVersion":{"type":"string","description":"Version number","ignoreCase":"key","aliases":["spotbugsGradlePluginVersion"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Gradle\n\nBuild using a Gradle wrapper script","ignoreCase":"value","pattern":"^Gradle@1$"},"inputs":{"description":"Gradle inputs","properties":{"gradleWrapperFile":{"type":"string","description":"Gradle Wrapper","ignoreCase":"key","aliases":["wrapperScript"]},"options":{"type":"string","description":"Options","ignoreCase":"key"},"tasks":{"type":"string","description":"Tasks","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"publishJUnitResults":{"type":"boolean","description":"Publish to TFS/Team Services","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test Results Files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"codeCoverageToolOption":{"description":"Code Coverage Tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class Files Directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageClassFilter":{"type":"string","description":"Class Inclusion/Exclusion Filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail When Code Coverage Results Are Missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK Version","ignoreCase":"all","enum":["default","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK Path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK Architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]},"gradleOptions":{"type":"string","description":"Set GRADLE_OPTS","ignoreCase":"key","aliases":["gradleOpts"]},"sonarQubeRunAnalysis":{"type":"boolean","description":"Run SonarQube Analysis","ignoreCase":"key","aliases":["sqAnalysisEnabled"]},"sonarQubeServiceEndpoint":{"type":"string","description":"SonarQube Endpoint","ignoreCase":"key","aliases":["sqConnectedServiceName"]},"sonarQubeProjectName":{"type":"string","description":"SonarQube Project Name","ignoreCase":"key","aliases":["sqProjectName"]},"sonarQubeProjectKey":{"type":"string","description":"SonarQube Project Key","ignoreCase":"key","aliases":["sqProjectKey"]},"sonarQubeProjectVersion":{"type":"string","description":"SonarQube Project Version","ignoreCase":"key","aliases":["sqProjectVersion"]},"sonarQubeGradlePluginVersion":{"type":"string","description":"SonarQube Gradle Plugin Version","ignoreCase":"key","aliases":["sqGradlePluginVersion"]},"sonarQubeSpecifyDB":{"type":"boolean","description":"The SonarQube server version is lower than 5.2","ignoreCase":"key","aliases":["sqDbDetailsRequired"]},"sonarQubeDBUrl":{"type":"string","description":"Db Connection String","ignoreCase":"key","aliases":["sqDbUrl"]},"sonarQubeDBUsername":{"type":"string","description":"Db Username","ignoreCase":"key","aliases":["sqDbUsername"]},"sonarQubeDBPassword":{"type":"string","description":"Db User Password","ignoreCase":"key","aliases":["sqDbPassword"]},"sonarQubeIncludeFullReport":{"type":"boolean","description":"Include full analysis report in the build summary (SQ 5.3+)","ignoreCase":"key","aliases":["sqAnalysisIncludeFullReport"]},"sonarQubeFailWhenQualityGateFails":{"type":"boolean","description":"Fail the build on quality gate failure (SQ 5.3+)","ignoreCase":"key","aliases":["sqAnalysisBreakBuildIfQualityGateFailed"]},"checkStyleRunAnalysis":{"type":"boolean","description":"Run Checkstyle","ignoreCase":"key","aliases":["checkstyleAnalysisEnabled"]},"findBugsRunAnalysis":{"type":"boolean","description":"Run FindBugs","ignoreCase":"key","aliases":["findbugsAnalysisEnabled"]},"pmdRunAnalysis":{"type":"boolean","description":"Run PMD","ignoreCase":"key","aliases":["pmdAnalysisEnabled"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Replace Tokens\n\nReplaces tokens in a file using RegEx. Values come from any variable defined in the current Environment.","ignoreCase":"value","pattern":"^ReplaceTokens@1$"},"inputs":{"description":"Replace Tokens inputs","properties":{"sourcePath":{"type":"string","description":"Source Path","ignoreCase":"key"},"filePattern":{"type":"string","description":"Target File Pattern","ignoreCase":"key"},"warningsAsErrors":{"type":"boolean","description":"Treat warnings as errors","ignoreCase":"key"},"tokenRegex":{"type":"string","description":"Token Regex","ignoreCase":"key"},"secretTokens":{"type":"string","description":"Secret Tokens (only for TFS 2015)","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Localization Plugin\n\nInstalls and configures the MicroBuild localization plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildLocalizationPlugin@1$"},"inputs":{"description":"MicroBuild Localization Plugin inputs","properties":{"type":{"description":"Localization Type","ignoreCase":"all","enum":["full","hybrid","pseudo"]},"languages":{"type":"string","description":"Languages","ignoreCase":"key"},"manifestPath":{"type":"string","description":"Manifest File (Deprecated)","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Localization Plugin\n\nInstalls and configures the MicroBuild localization plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildLocalizationPlugin@4$"},"inputs":{"description":"MicroBuild Localization Plugin inputs","properties":{"type":{"description":"Localization Type","ignoreCase":"all","enum":["full","hybrid","pseudo"]},"languages":{"type":"string","description":"Languages","ignoreCase":"key"},"lsbuildVersion":{"description":"LSBuild Version","ignoreCase":"all","enum":["V7","V6"]},"manifestPath":{"type":"string","description":"Manifest File (Deprecated)","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Localization Plugin\n\nInstalls and configures the MicroBuild localization plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildLocalizationPlugin@3$"},"inputs":{"description":"MicroBuild Localization Plugin inputs","properties":{"type":{"description":"Localization Type","ignoreCase":"all","enum":["full","hybrid","pseudo"]},"languages":{"type":"string","description":"Languages","ignoreCase":"key"},"manifestPath":{"type":"string","description":"Manifest File (Deprecated)","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Localization Plugin\n\nInstalls and configures the MicroBuild localization plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildLocalizationPlugin@2$"},"inputs":{"description":"MicroBuild Localization Plugin inputs","properties":{"type":{"description":"Localization Type","ignoreCase":"all","enum":["full","hybrid","pseudo"]},"languages":{"type":"string","description":"Languages","ignoreCase":"key"},"manifestPath":{"type":"string","description":"Manifest File (Deprecated)","ignoreCase":"key"},"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"ESRP Malware Scanning\n\nMicrosoft Internal tool for Malware Scanning of files using ESRP Service","ignoreCase":"value","pattern":"^EsrpMalwareScanning@1$"},"inputs":{"description":"ESRP Malware Scanning inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Connection Name","ignoreCase":"key"},"FolderPath":{"type":"string","description":"Root folder path to get input files for scanning","ignoreCase":"key"},"Pattern":{"type":"string","description":"File search pattern to discover to be scanned files inside Root Folder Path variable above","ignoreCase":"key"},"UseMinimatch":{"type":"boolean","description":"Use Minimatch","ignoreCase":"key"},"Region":{"description":"Datacenter","ignoreCase":"all","enum":["PuertoRico","US"]},"SessionTimeout":{"type":"string","description":"Max Session Time (minutes)","ignoreCase":"key"},"ServiceEndpointUrl":{"type":"string","description":"API Endpoint Url","ignoreCase":"key"},"MaxConcurrency":{"type":"string","description":"Max Concurrency","ignoreCase":"key"},"MaxRetryAttempts":{"type":"string","description":"Max Retry Attempts","ignoreCase":"key"},"CleanupTempStorage":{"type":"boolean","description":"Cleanup all temp blob storage","ignoreCase":"key"},"VerboseLogin":{"type":"boolean","description":"Verbose Logs","ignoreCase":"key"},"tlsVersion":{"description":"TLS Version","ignoreCase":"all","enum":["Tls","Tls11","Tls12"]}},"additionalProperties":false,"required":["ConnectedServiceName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"App Center distribute\n\nDistribute app builds to testers and users via Visual Studio App Center","ignoreCase":"value","pattern":"^AppCenterDistribute@1$"},"inputs":{"description":"App Center distribute inputs","properties":{"serverEndpoint":{"type":"string","description":"App Center service connection","ignoreCase":"key"},"appSlug":{"type":"string","description":"App slug","ignoreCase":"key"},"appFile":{"type":"string","description":"Binary file path","ignoreCase":"key","aliases":["app"]},"symbolsOption":{"description":"Symbols type","ignoreCase":"all","enum":["Apple"],"aliases":["symbolsType"]},"symbolsPath":{"type":"string","description":"Symbols path","ignoreCase":"key"},"symbolsPdbFiles":{"type":"string","description":"Symbols path (*.pdb)","ignoreCase":"key","aliases":["pdbPath"]},"symbolsDsymFiles":{"type":"string","description":"dSYM path","ignoreCase":"key","aliases":["dsymPath"]},"symbolsMappingTxtFile":{"type":"string","description":"Mapping file","ignoreCase":"key","aliases":["mappingTxtPath"]},"symbolsIncludeParentDirectory":{"type":"boolean","description":"Include all items in parent folder","ignoreCase":"key","aliases":["packParentFolder"]},"releaseNotesOption":{"description":"Create release notes","ignoreCase":"all","enum":["input","file"],"aliases":["releaseNotesSelection"]},"releaseNotesInput":{"type":"string","description":"Release notes","ignoreCase":"key"},"releaseNotesFile":{"type":"string","description":"Release notes file","ignoreCase":"key"},"isMandatory":{"type":"boolean","description":"Require users to update to this release","ignoreCase":"key"},"distributionGroupId":{"type":"string","description":"Destination ID","ignoreCase":"key","aliases":["destinationId"]}},"additionalProperties":false,"required":["serverEndpoint","appSlug","appFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"App Center distribute\n\nDistribute app builds to testers and users via Visual Studio App Center","ignoreCase":"value","pattern":"^AppCenterDistribute@2$"},"inputs":{"description":"App Center distribute inputs","properties":{"serverEndpoint":{"type":"string","description":"App Center service connection","ignoreCase":"key"},"appSlug":{"type":"string","description":"App slug","ignoreCase":"key"},"appFile":{"type":"string","description":"Binary file path","ignoreCase":"key","aliases":["app"]},"symbolsOption":{"description":"Symbols type","ignoreCase":"all","enum":["Apple"],"aliases":["symbolsType"]},"symbolsPath":{"type":"string","description":"Symbols path","ignoreCase":"key"},"symbolsPdbFiles":{"type":"string","description":"Symbols path (*.pdb)","ignoreCase":"key","aliases":["pdbPath"]},"symbolsDsymFiles":{"type":"string","description":"dSYM path","ignoreCase":"key","aliases":["dsymPath"]},"symbolsMappingTxtFile":{"type":"string","description":"Mapping file","ignoreCase":"key","aliases":["mappingTxtPath"]},"symbolsIncludeParentDirectory":{"type":"boolean","description":"Include all items in parent folder","ignoreCase":"key","aliases":["packParentFolder"]},"releaseNotesOption":{"description":"Create release notes","ignoreCase":"all","enum":["input","file"],"aliases":["releaseNotesSelection"]},"releaseNotesInput":{"type":"string","description":"Release notes","ignoreCase":"key"},"releaseNotesFile":{"type":"string","description":"Release notes file","ignoreCase":"key"},"isMandatory":{"type":"boolean","description":"Require users to update to this release","ignoreCase":"key"},"distributionGroupId":{"type":"string","description":"Destination IDs","ignoreCase":"key","aliases":["destinationIds","destinationId"]}},"additionalProperties":false,"required":["serverEndpoint","appSlug","appFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"App Center distribute\n\nDistribute app builds to testers and users via Visual Studio App Center","ignoreCase":"value","pattern":"^AppCenterDistribute@3$"},"inputs":{"description":"App Center distribute inputs","properties":{"serverEndpoint":{"type":"string","description":"App Center service connection","ignoreCase":"key"},"appSlug":{"type":"string","description":"App slug","ignoreCase":"key"},"appFile":{"type":"string","description":"Binary file path","ignoreCase":"key","aliases":["app"]},"buildVersion":{"type":"string","description":"Build version","ignoreCase":"key"},"symbolsOption":{"description":"Symbols type","ignoreCase":"all","enum":["Apple","Android","UWP"],"aliases":["symbolsType"]},"symbolsPath":{"type":"string","description":"Symbols path","ignoreCase":"key"},"appxsymPath":{"type":"string","description":"Symbols path (*.appxsym)","ignoreCase":"key"},"symbolsDsymFiles":{"type":"string","description":"dSYM path","ignoreCase":"key","aliases":["dsymPath"]},"symbolsMappingTxtFile":{"type":"string","description":"Mapping file","ignoreCase":"key","aliases":["mappingTxtPath"]},"nativeLibrariesPath":{"type":"string","description":"Native Library File Path","ignoreCase":"key"},"symbolsIncludeParentDirectory":{"type":"boolean","description":"Include all items in parent folder","ignoreCase":"key","aliases":["packParentFolder"]},"releaseNotesOption":{"description":"Create release notes","ignoreCase":"all","enum":["input","file"],"aliases":["releaseNotesSelection"]},"releaseNotesInput":{"type":"string","description":"Release notes","ignoreCase":"key"},"releaseNotesFile":{"type":"string","description":"Release notes file","ignoreCase":"key"},"isMandatory":{"type":"boolean","description":"Require users to update to this release","ignoreCase":"key"},"destinationType":{"description":"Release destination","ignoreCase":"all","enum":["groups","store"]},"distributionGroupId":{"type":"string","description":"Destination IDs","ignoreCase":"key","aliases":["destinationGroupIds"]},"destinationStoreId":{"type":"string","description":"Destination ID","ignoreCase":"key"},"isSilent":{"type":"boolean","description":"Do not notify testers. Release will still be available to install.","ignoreCase":"key"}},"additionalProperties":false,"required":["serverEndpoint","appSlug","appFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"App Center Distribute\n\nDistribute app builds to testers and users via App Center","ignoreCase":"value","pattern":"^AppCenterDistribute@0$"},"inputs":{"description":"App Center Distribute inputs","properties":{"serverEndpoint":{"type":"string","description":"App Center connection","ignoreCase":"key"},"appSlug":{"type":"string","description":"App slug","ignoreCase":"key"},"appFile":{"type":"string","description":"Binary file path","ignoreCase":"key","aliases":["app"]},"symbolsOption":{"description":"Symbols type","ignoreCase":"all","enum":["Apple"],"aliases":["symbolsType"]},"symbolsPath":{"type":"string","description":"Symbols path","ignoreCase":"key"},"symbolsPdbFiles":{"type":"string","description":"Symbols path (*.pdb)","ignoreCase":"key","aliases":["pdbPath"]},"symbolsDsymFiles":{"type":"string","description":"dSYM path","ignoreCase":"key","aliases":["dsymPath"]},"symbolsMappingTxtFile":{"type":"string","description":"Mapping file","ignoreCase":"key","aliases":["mappingTxtPath"]},"symbolsIncludeParentDirectory":{"type":"boolean","description":"Include all items in parent folder","ignoreCase":"key","aliases":["packParentFolder"]},"releaseNotesOption":{"description":"Create release notes","ignoreCase":"all","enum":["input","file"],"aliases":["releaseNotesSelection"]},"releaseNotesInput":{"type":"string","description":"Release notes","ignoreCase":"key"},"releaseNotesFile":{"type":"string","description":"Release notes file","ignoreCase":"key"},"distributionGroupId":{"type":"string","description":"Distribution group ID","ignoreCase":"key"}},"additionalProperties":false,"required":["serverEndpoint","appSlug","appFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"NuGet tool installer\n\nAcquires a specific version of NuGet from the internet or the tools cache and adds it to the PATH. Use this task to change the version of NuGet used in the NuGet tasks.","ignoreCase":"value","pattern":"^NuGetToolInstaller@1$"},"inputs":{"description":"NuGet tool installer inputs","properties":{"versionSpec":{"type":"string","description":"Version of NuGet.exe to install","ignoreCase":"key"},"checkLatest":{"type":"boolean","description":"Always check for new versions","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"NuGet tool installer\n\nAcquires a specific version of NuGet from the internet or the tools cache and adds it to the PATH. Use this task to change the version of NuGet used in the NuGet tasks.","ignoreCase":"value","pattern":"^NuGetToolInstaller@0$"},"inputs":{"description":"NuGet tool installer inputs","properties":{"versionSpec":{"type":"string","description":"Version of NuGet.exe to install","ignoreCase":"key"},"checkLatest":{"type":"boolean","description":"Always download the latest matching version","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"(deprecated) Azure Web Deploy\n\nInvokes web deploy to Azure website, substituting any Environment variables into the SetParameters.xml file","ignoreCase":"value","pattern":"^AzureWebDeploy@0$"},"inputs":{"description":"(deprecated) Azure Web Deploy inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Azure Subscription","ignoreCase":"key"},"WebSiteName":{"type":"string","description":"Web App Name","ignoreCase":"key"},"WebSiteLocation":{"description":"Web App Location","ignoreCase":"all","enum":["Australia East","Australia Southeast","Brazil South","Central US","East Asia","East US","East US2","Japan East","Japan West","North Central US","North Europe","South Central US","Southeast Asia","West Europe","West US"]},"Slot":{"type":"string","description":"Slot","ignoreCase":"key"},"PackagePath":{"type":"string","description":"Web Deploy Package Path","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","WebSiteName","PackagePath"]}},"deprecationMessage":"AzureWebDeploy is deprecated - Invokes web deploy to Azure website, substituting any Environment variables into the SetParameters.xml file","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"OneLocBuild\n\nGeneric LSBuild wrapper which streamlines the localization build process and optionally checks-in resulting localized files to a repo","ignoreCase":"value","pattern":"^OneLocBuild@2$"},"inputs":{"description":"OneLocBuild inputs","properties":{"locProj":{"type":"string","description":"Localization Project","ignoreCase":"key"},"outDir":{"type":"string","description":"Output Directory","ignoreCase":"key"},"lclSource":{"description":"LCL Source","ignoreCase":"all","enum":["lclFilesInRepo","lclFilesfromPackage"]},"lclPackageId":{"type":"string","description":"LCL Package ID","ignoreCase":"key"},"lclPackageVersion":{"description":"LCL Package Version","ignoreCase":"all","enum":["highestLclPackageVersion","lclPackageVersionSetByVariable"]},"lclPackageVersionVariable":{"type":"string","description":"Variable for LCL Package Version","ignoreCase":"key"},"isEnablePseudoLanguagesSelected":{"type":"boolean","description":"Enable localization for pseudo languages","ignoreCase":"key"},"isCreatePrSelected":{"type":"boolean","description":"Create a pull request to check-in localized files to the repo","ignoreCase":"key"},"repoType":{"description":"Repo Type","ignoreCase":"all","enum":["azureReposGit","gitHub"]},"prSourceBranchPrefix":{"type":"string","description":"Pull Request Source Branch Prefix","ignoreCase":"key"},"azureReposGitPatVariable":{"type":"string","description":"Variable for Azure Repos Git PAT","ignoreCase":"key"},"gitHubPatVariable":{"type":"string","description":"Variable for GitHub PAT","ignoreCase":"key"},"isShouldReusePrSelected":{"type":"boolean","description":"Reuse an existing, active pull request if available","ignoreCase":"key"},"isAutoCompletePrSelected":{"type":"boolean","description":"Auto-Complete a pull request","ignoreCase":"key"},"isDeletePrSourceBranchSelected":{"type":"boolean","description":"Delete a source branch after completing a pull request","ignoreCase":"key"},"isUseLfLineEndingsSelected":{"type":"boolean","description":"Use LF line endings when localized files are checked-in","ignoreCase":"key"},"gitHubPrMergeMethod":{"description":"Pull Request Merge Method","ignoreCase":"all","enum":["merge","squash","rebase"]},"isMirrorRepoSelected":{"type":"boolean","description":"Check-in localized files to the mirror repo","ignoreCase":"key"},"gitHubOrganization":{"type":"string","description":"GitHub Organization","ignoreCase":"key"},"adoOrganization":{"type":"string","description":"Azure DevOps Organization URL","ignoreCase":"key"},"adoProject":{"type":"string","description":"Azure DevOps Project","ignoreCase":"key"},"mirrorRepo":{"type":"string","description":"Mirror Repo","ignoreCase":"key"},"mirrorBranch":{"type":"string","description":"Mirror Branch","ignoreCase":"key"},"packageSourceAuth":{"description":"Package Source Authentication","ignoreCase":"all","enum":["credentialProviderAuth","patAuth"]},"patVariable":{"type":"string","description":"Variable for Package PAT","ignoreCase":"key"},"lsBuildPackageId":{"description":"LSBuild Package ID","ignoreCase":"all","enum":["lsBuildXLoc","lsBuildLegacyXLoc"]},"lsBuildXLocPackageVersion":{"type":"string","description":"LSBuild.XLoc Package Version","ignoreCase":"key"},"lsBuildLegacyXLocPackageVersion":{"type":"string","description":"LSBuild.Legacy.XLoc Package Version","ignoreCase":"key"},"lsBuildWarningLevel":{"description":"LSBuild Warning Level","ignoreCase":"all","enum":["0","1","2","3","4"]},"xLocConsoleLoggingLevel":{"description":"XLoc Tool Console Logging Level","ignoreCase":"all","enum":["verbose","debug","information","warning","error","fatal"]},"nugetCliVersion":{"type":"string","description":"NuGet CLI Version","ignoreCase":"key"},"isOutputLocStatusSelected":{"type":"boolean","description":"Output the status of localization completeness","ignoreCase":"key"},"xLocCustomPowerShellScript":{"type":"string","description":"XLoc Tool Custom PowerShell Script","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Jenkins download artifacts\n\nDownload artifacts produced by a Jenkins job","ignoreCase":"value","pattern":"^JenkinsDownloadArtifacts@1$"},"inputs":{"description":"Jenkins download artifacts inputs","properties":{"jenkinsServerConnection":{"type":"string","description":"Jenkins service connection","ignoreCase":"key","aliases":["serverEndpoint"]},"jobName":{"type":"string","description":"Job name","ignoreCase":"key"},"jenkinsJobType":{"type":"string","description":"Jenkins job type","ignoreCase":"key"},"saveTo":{"type":"string","description":"Save to","ignoreCase":"key"},"jenkinsBuild":{"description":"Download artifacts produced by","ignoreCase":"all","enum":["LastSuccessfulBuild","BuildNumber"]},"jenkinsBuildNumber":{"type":"string","description":"Jenkins build number","ignoreCase":"key"},"itemPattern":{"type":"string","description":"Item Pattern","ignoreCase":"key"},"downloadCommitsAndWorkItems":{"type":"boolean","description":"Download Commits and WorkItems","ignoreCase":"key"},"startJenkinsBuildNumber":{"type":"string","description":"Download commits and work items from","ignoreCase":"key"},"artifactDetailsFileNameSuffix":{"type":"string","description":"Commit and WorkItem FileName","ignoreCase":"key"},"propagatedArtifacts":{"type":"boolean","description":"Artifacts are propagated to Azure","ignoreCase":"key"},"artifactProvider":{"description":"Artifact Provider","ignoreCase":"all","enum":["azureStorage"]},"ConnectedServiceNameARM":{"type":"string","description":"Azure Subscription","ignoreCase":"key"},"storageAccountName":{"type":"string","description":"Storage Account Name","ignoreCase":"key"},"containerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"commonVirtualPath":{"type":"string","description":"Common Virtual Path","ignoreCase":"key"}},"additionalProperties":false,"required":["jenkinsServerConnection","jobName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Functions for container\n\nUpdate a function app with a Docker container","ignoreCase":"value","pattern":"^AzureFunctionAppContainer@1$"},"inputs":{"description":"Azure Functions for container inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"appName":{"type":"string","description":"App name","ignoreCase":"key"},"deployToSlotOrASE":{"type":"boolean","description":"Deploy to Slot or App Service Environment","ignoreCase":"key"},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"slotName":{"type":"string","description":"Slot","ignoreCase":"key"},"imageName":{"type":"string","description":"Image name","ignoreCase":"key"},"containerCommand":{"type":"string","description":"Startup command ","ignoreCase":"key"},"appSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"configurationStrings":{"type":"string","description":"Configuration settings","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","appName","imageName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Decrypt file (OpenSSL)\n\nDecrypt a file using OpenSSL","ignoreCase":"value","pattern":"^DecryptFile@1$"},"inputs":{"description":"Decrypt file (OpenSSL) inputs","properties":{"cipher":{"type":"string","description":"Cypher","ignoreCase":"key"},"inFile":{"type":"string","description":"Encrypted file","ignoreCase":"key"},"passphrase":{"type":"string","description":"Passphrase","ignoreCase":"key"},"outFile":{"type":"string","description":"Decrypted file path","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]}},"additionalProperties":false,"required":["inFile","passphrase"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Package and deploy Helm charts\n\nDeploy, configure, update a Kubernetes cluster in Azure Container Service by running helm commands","ignoreCase":"value","pattern":"^HelmDeploy@0$"},"inputs":{"description":"Package and deploy Helm charts inputs","properties":{"connectionType":{"description":"Connection Type","ignoreCase":"all","enum":["Azure Resource Manager","Kubernetes Service Connection","None"]},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["azureSubscriptionEndpoint"]},"azureResourceGroup":{"type":"string","description":"Resource group","ignoreCase":"key"},"kubernetesCluster":{"type":"string","description":"Kubernetes cluster","ignoreCase":"key"},"useClusterAdmin":{"type":"boolean","description":"Use cluster admin credentials","ignoreCase":"key"},"kubernetesServiceConnection":{"type":"string","description":"Kubernetes Service Connection","ignoreCase":"key","aliases":["kubernetesServiceEndpoint"]},"namespace":{"type":"string","description":"Namespace","ignoreCase":"key"},"azureSubscriptionForACR":{"type":"string","description":"Azure subscription for Container Registry","ignoreCase":"key","aliases":["azureSubscriptionEndpointForACR"]},"azureResourceGroupForACR":{"type":"string","description":"Resource group","ignoreCase":"key"},"azureContainerRegistry":{"type":"string","description":"Azure Container Registry","ignoreCase":"key"},"command":{"description":"Command","ignoreCase":"all","enum":["create","delete","expose","get","init","install","login","logout","ls","package","rollback","save","upgrade","uninstall"]},"chartType":{"description":"Chart Type","ignoreCase":"all","enum":["Name","FilePath"]},"chartName":{"type":"string","description":"Chart Name","ignoreCase":"key"},"chartPath":{"type":"string","description":"Chart Path","ignoreCase":"key"},"chartVersion":{"type":"string","description":"Version","ignoreCase":"key","aliases":["version"]},"releaseName":{"type":"string","description":"Release Name","ignoreCase":"key"},"overrideValues":{"type":"string","description":"Set Values","ignoreCase":"key"},"valueFile":{"type":"string","description":"Value File","ignoreCase":"key"},"destination":{"type":"string","description":"Destination","ignoreCase":"key"},"canaryImage":{"type":"boolean","description":"Use canary image version.","ignoreCase":"key","aliases":["canaryimage"]},"upgradeTiller":{"type":"boolean","description":"Upgrade Tiller","ignoreCase":"key","aliases":["upgradetiller"]},"updateDependency":{"type":"boolean","description":"Update Dependency","ignoreCase":"key","aliases":["updatedependency"]},"save":{"type":"boolean","description":"Save","ignoreCase":"key"},"install":{"type":"boolean","description":"Install if release not present.","ignoreCase":"key"},"recreate":{"type":"boolean","description":"Recreate Pods.","ignoreCase":"key"},"resetValues":{"type":"boolean","description":"Reset Values.","ignoreCase":"key"},"force":{"type":"boolean","description":"Force","ignoreCase":"key"},"waitForExecution":{"type":"boolean","description":"Wait","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"enableTls":{"type":"boolean","description":"Enable TLS","ignoreCase":"key"},"caCert":{"type":"string","description":"CA certificate","ignoreCase":"key"},"certificate":{"type":"string","description":"Certificate","ignoreCase":"key"},"privatekey":{"type":"string","description":"Key","ignoreCase":"key"},"tillerNamespace":{"type":"string","description":"Tiller namespace","ignoreCase":"key","aliases":["tillernamespace"]},"failOnStderr":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"publishPipelineMetadata":{"type":"boolean","description":"Publish pipeline metadata","ignoreCase":"key"},"chartNameForACR":{"type":"string","description":"Chart Name For Azure Container Registry","ignoreCase":"key"},"chartPathForACR":{"type":"string","description":"Chart Path for Azure Container Registry","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscriptionForACR","azureResourceGroupForACR","azureContainerRegistry"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Install Apple certificate\n\nInstall an Apple certificate required to build on a macOS agent machine","ignoreCase":"value","pattern":"^InstallAppleCertificate@2$"},"inputs":{"description":"Install Apple certificate inputs","properties":{"certSecureFile":{"type":"string","description":"Certificate (P12)","ignoreCase":"key"},"certPwd":{"type":"string","description":"Certificate (P12) password","ignoreCase":"key"},"keychain":{"description":"Keychain","ignoreCase":"all","enum":["default","temp","custom"]},"keychainPassword":{"type":"string","description":"Keychain password","ignoreCase":"key"},"customKeychainPath":{"type":"string","description":"Custom keychain path","ignoreCase":"key"},"deleteCert":{"type":"boolean","description":"Delete certificate from keychain","ignoreCase":"key"},"deleteCustomKeychain":{"type":"boolean","description":"Delete custom keychain","ignoreCase":"key"},"signingIdentity":{"type":"string","description":"Certificate signing identity","ignoreCase":"key"},"setUpPartitionIdACLForPrivateKey":{"type":"boolean","description":"Set up partition_id ACL for the imported private key","ignoreCase":"key"}},"additionalProperties":false,"required":["certSecureFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Install Apple Certificate\n\nInstall an Apple certificate required to build on a macOS agent","ignoreCase":"value","pattern":"^InstallAppleCertificate@1$"},"inputs":{"description":"Install Apple Certificate inputs","properties":{"certSecureFile":{"type":"string","description":"Certificate (P12)","ignoreCase":"key"},"certPwd":{"type":"string","description":"Certificate (P12) password","ignoreCase":"key"},"keychain":{"description":"Keychain","ignoreCase":"all","enum":["default","temp","custom"]},"keychainPassword":{"type":"string","description":"Keychain password","ignoreCase":"key"},"customKeychainPath":{"type":"string","description":"Custom keychain path","ignoreCase":"key"},"deleteCert":{"type":"boolean","description":"Delete certificate from keychain","ignoreCase":"key"},"deleteCustomKeychain":{"type":"boolean","description":"Delete custom keychain","ignoreCase":"key"},"signingIdentity":{"type":"string","description":"Certificate signing identity","ignoreCase":"key"}},"additionalProperties":false,"required":["certSecureFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Install Apple Certificate\n\nInstall an Apple certificate required to build on a macOS agent","ignoreCase":"value","pattern":"^InstallAppleCertificate@0$"},"inputs":{"description":"Install Apple Certificate inputs","properties":{"certSecureFile":{"type":"string","description":"Certificate (P12)","ignoreCase":"key"},"certPwd":{"type":"string","description":"Certificate (P12) Password","ignoreCase":"key"},"keychain":{"description":"Keychain","ignoreCase":"all","enum":["default","temp","custom"]},"keychainPassword":{"type":"string","description":"Keychain Password","ignoreCase":"key"},"customKeychainPath":{"type":"string","description":"Custom Keychain Path","ignoreCase":"key"},"deleteCert":{"type":"boolean","description":"Delete Certificate from Keychain","ignoreCase":"key"},"deleteCustomKeychain":{"type":"boolean","description":"Delete Custom Keychain","ignoreCase":"key"},"signingIdentity":{"type":"string","description":"Certificate Signing Identity","ignoreCase":"key"}},"additionalProperties":false,"required":["certSecureFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"ESRP Code Signing\n\nMicrosoft Internal tool for Code Signing files using ESRP Service","ignoreCase":"value","pattern":"^EsrpCodeSigning@1$"},"inputs":{"description":"ESRP Code Signing inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Connection Name","ignoreCase":"key"},"FolderPath":{"type":"string","description":"Root folder path to get input files for signing","ignoreCase":"key"},"signType":{"description":"Sign Categories","ignoreCase":"all","enum":["regularSigning","batchSigning"]},"Pattern":{"type":"string","description":"File search pattern to discover to be signed files inside RootFolder variable","ignoreCase":"key"},"UseMinimatch":{"type":"boolean","description":"Use Minimatch","ignoreCase":"key"},"batchSignPolicyFile":{"type":"string","description":"BatchSign Policy File Input","ignoreCase":"key"},"ciPolicyFile":{"type":"string","description":"CI Policy File Input","ignoreCase":"key"},"guardianToolTimeout":{"type":"string","description":"Max Guardian Tool Run Time (minutes)","ignoreCase":"key"},"signConfigType":{"description":"Signing Configurations","ignoreCase":"all","enum":["legacyCops","inlineSignParams"]},"CertificateId":{"type":"string","description":"Certificate Id","ignoreCase":"key"},"OpusName":{"type":"string","description":"Product Name","ignoreCase":"key"},"OpusInfo":{"type":"string","description":"Product info url","ignoreCase":"key"},"inlineOperation":{"type":"string","description":"Inline Signing Configurations","ignoreCase":"key"},"SessionTimeout":{"type":"string","description":"Max Session Time (minutes)","ignoreCase":"key"},"ServiceEndpointUrl":{"type":"string","description":"API Endpoint Url","ignoreCase":"key"},"MaxConcurrency":{"type":"string","description":"Max Concurrency","ignoreCase":"key"},"MaxRetryAttempts":{"type":"string","description":"Max Retry Attempts","ignoreCase":"key"},"CleanupTempStorage":{"type":"boolean","description":"Cleanup all temp blob storage","ignoreCase":"key"},"VerboseLogin":{"type":"boolean","description":"Verbose Logs","ignoreCase":"key"},"tlsVersion":{"description":"TLS Version","ignoreCase":"all","enum":["Tls","Tls11","Tls12"]}},"additionalProperties":false,"required":["ConnectedServiceName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Invoke Azure Function\n\nInvoke an Azure Function","ignoreCase":"value","pattern":"^AzureFunction@1$"},"inputs":{"description":"Invoke Azure Function inputs","properties":{"function":{"type":"string","description":"Azure function URL","ignoreCase":"key"},"key":{"type":"string","description":"Function key","ignoreCase":"key"},"method":{"description":"Method","ignoreCase":"all","enum":["OPTIONS","GET","HEAD","POST","PUT","DELETE","TRACE","PATCH"]},"headers":{"type":"string","description":"Headers","ignoreCase":"key"},"queryParameters":{"type":"string","description":"Query parameters","ignoreCase":"key"},"body":{"type":"string","description":"Body","ignoreCase":"key"},"waitForCompletion":{"description":"Completion event","ignoreCase":"all","enum":["true","false"]},"successCriteria":{"type":"string","description":"Success criteria","ignoreCase":"key"}},"additionalProperties":false,"required":["function","key"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Invoke Azure Function\n\nInvoke Azure function as a part of your process.","ignoreCase":"value","pattern":"^AzureFunction@0$"},"inputs":{"description":"Invoke Azure Function inputs","properties":{"function":{"type":"string","description":"Azure function url","ignoreCase":"key"},"key":{"type":"string","description":"Function key","ignoreCase":"key"},"method":{"description":"Method","ignoreCase":"all","enum":["OPTIONS","GET","HEAD","POST","PUT","DELETE","TRACE","PATCH"]},"headers":{"type":"string","description":"Headers","ignoreCase":"key"},"queryParameters":{"type":"string","description":"Query parameters","ignoreCase":"key"},"body":{"type":"string","description":"Body","ignoreCase":"key"},"waitForCompletion":{"description":"Complete based on","ignoreCase":"all","enum":["true","false"]},"successCriteria":{"type":"string","description":"Success criteria","ignoreCase":"key"}},"additionalProperties":false,"required":["function","key"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Nuget Security Analysis\n\nA task to scan for vulnerabilities in nuget files.","ignoreCase":"value","pattern":"^nuget-security-analysis@0$"},"inputs":{"description":"Nuget Security Analysis inputs","properties":{},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"DacPac Schema Compare\n\nProvides a report on database model changes since the last build","ignoreCase":"value","pattern":"^DacPacReport@1$"},"inputs":{"description":"DacPac Schema Compare inputs","properties":{"dropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"dacpacName":{"type":"string","description":"DacPac Name","ignoreCase":"key"},"targetDacPacPath":{"type":"string","description":"Compiled DacPac Path","ignoreCase":"key"},"extraArgs":{"type":"string","description":"Extra SQLPackage args","ignoreCase":"key"},"reverse":{"type":"boolean","description":"Reverse Comparison","ignoreCase":"key"},"userSqlPackagePath":{"type":"string","description":"SQL Package exe filepath","ignoreCase":"key"}},"additionalProperties":false,"required":["dacpacName","targetDacPacPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Download GitHub Release\n\nDownloads a GitHub Release from a repository","ignoreCase":"value","pattern":"^DownloadGitHubRelease@0$"},"inputs":{"description":"Download GitHub Release inputs","properties":{"connection":{"type":"string","description":"GitHub Connection","ignoreCase":"key"},"userRepository":{"type":"string","description":"Repository","ignoreCase":"key"},"defaultVersionType":{"description":"Default version","ignoreCase":"all","enum":["latest","specificVersion","specificTag"]},"version":{"type":"string","description":"Release","ignoreCase":"key"},"itemPattern":{"type":"string","description":"Item Pattern","ignoreCase":"key"},"downloadPath":{"type":"string","description":"Destination directory","ignoreCase":"key"}},"additionalProperties":false,"required":["connection","userRepository"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"SSH\n\nRun shell commands or a script on a remote machine using SSH","ignoreCase":"value","pattern":"^SSH@0$"},"inputs":{"description":"SSH inputs","properties":{"sshEndpoint":{"type":"string","description":"SSH service connection","ignoreCase":"key"},"runOptions":{"description":"Run","ignoreCase":"all","enum":["commands","script","inline"]},"commands":{"type":"string","description":"Commands","ignoreCase":"key"},"scriptPath":{"type":"string","description":"Shell script path","ignoreCase":"key"},"inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"interpreterCommand":{"type":"string","description":"Interpreter command","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"failOnStdErr":{"type":"boolean","description":"Fail on STDERR","ignoreCase":"key"},"interactiveSession":{"type":"boolean","description":"Enable interactive session","ignoreCase":"key"},"readyTimeout":{"type":"string","description":"SSH handshake timeout","ignoreCase":"key"}},"additionalProperties":false,"required":["sshEndpoint"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Publish Pipeline Artifacts\n\nPublish (upload) a file or directory as a named artifact for the current run","ignoreCase":"value","pattern":"^PublishPipelineArtifact@1$"},"inputs":{"description":"Publish Pipeline Artifacts inputs","properties":{"targetPath":{"type":"string","description":"File or directory path","ignoreCase":"key","aliases":["path"]},"artifact":{"type":"string","description":"Artifact name","ignoreCase":"key","aliases":["artifactName"]},"publishLocation":{"description":"Artifact publish location","ignoreCase":"all","enum":["pipeline","filepath"],"aliases":["artifactType"]},"fileSharePath":{"type":"string","description":"File share path","ignoreCase":"key"},"parallel":{"type":"boolean","description":"Parallel copy","ignoreCase":"key"},"parallelCount":{"type":"integer","description":"Parallel count","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Publish pipeline artifact\n\nPublish a local directory or file as a named artifact for the current pipeline","ignoreCase":"value","pattern":"^PublishPipelineArtifact@0$"},"inputs":{"description":"Publish pipeline artifact inputs","properties":{"artifactName":{"type":"string","description":"The name of this artifact","ignoreCase":"key"},"targetPath":{"type":"string","description":"Path to publish","ignoreCase":"key"}},"additionalProperties":false,"required":["targetPath"]}},"deprecationMessage":"PublishPipelineArtifact is deprecated - Publish a local directory or file as a named artifact for the current pipeline","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"SonarQube for MSBuild - Begin Analysis\n\n[DEPRECATED] Fetch the Quality Profile from SonarQube to configure the analysis","ignoreCase":"value","pattern":"^SonarQubePreBuild@1$"},"inputs":{"description":"SonarQube for MSBuild - Begin Analysis inputs","properties":{"projectKey":{"type":"string","description":"Project Key","ignoreCase":"key"},"projectName":{"type":"string","description":"Project Name","ignoreCase":"key"},"projectVersion":{"type":"string","description":"Project Version","ignoreCase":"key"},"connectedServiceName":{"type":"string","description":"SonarQube Endpoint","ignoreCase":"key"},"dbUrl":{"type":"string","description":"Db Connection String","ignoreCase":"key"},"dbUsername":{"type":"string","description":"Db UserName","ignoreCase":"key"},"dbPassword":{"type":"string","description":"Db User Password","ignoreCase":"key"},"cmdLineArgs":{"type":"string","description":"Additional Settings","ignoreCase":"key"},"configFile":{"type":"string","description":"Settings File","ignoreCase":"key"},"includeFullReport":{"type":"boolean","description":"Include full analysis report in the build summary (SQ 5.3+)","ignoreCase":"key"},"breakBuild":{"type":"boolean","description":"Fail the build on quality gate failure (SQ 5.3+)","ignoreCase":"key"}},"additionalProperties":false,"required":["projectKey","projectName","connectedServiceName"]}},"deprecationMessage":"SonarQubePreBuild is deprecated - [DEPRECATED] Fetch the Quality Profile from SonarQube to configure the analysis","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Build VS Bootstrapper\n\nBuilds a VS Bootstrapper including the changes of the manifests from one or more components","ignoreCase":"value","pattern":"^MicroBuildBuildVSBootstrapper@2$"},"inputs":{"description":"MicroBuild Build VS Bootstrapper inputs","properties":{"channelName":{"type":"string","description":"VS Channel","ignoreCase":"key"},"vsMajorVersion":{"type":"string","description":"VS Major Version","ignoreCase":"key"},"manifests":{"type":"string","description":"Overlay Manifests","ignoreCase":"key"},"outputFolder":{"type":"string","description":"Bootstrapper Folder","ignoreCase":"key"},"buildBranch":{"type":"string","description":"VS Branch","ignoreCase":"key"},"buildNumber":{"type":"string","description":"VS Build Number","ignoreCase":"key"},"bootstrapperCoreVersion":{"type":"string","description":"Bootstrapper Core Version","ignoreCase":"key"},"bootstrapperCoreFeedSource":{"type":"string","description":"Bootstrapper NuGet Feed","ignoreCase":"key"},"bootstrapperCoreDependenciesFeedSource":{"type":"string","description":"Bootstrapper Dependencies NuGet Feed","ignoreCase":"key"},"nugetOrgPublicFeedSource":{"type":"string","description":"NuGet.org feed location","ignoreCase":"key"}},"additionalProperties":false,"required":["manifests","outputFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Build VS Bootstrapper\n\nBuilds a VS Bootstrapper including the changes of the manifests from one or more components","ignoreCase":"value","pattern":"^MicroBuildBuildVSBootstrapper@1$"},"inputs":{"description":"MicroBuild Build VS Bootstrapper inputs","properties":{"channelName":{"type":"string","description":"VS Channel","ignoreCase":"key"},"vsMajorVersion":{"type":"string","description":"VS Major Version","ignoreCase":"key"},"manifests":{"type":"string","description":"Overlay Manifests","ignoreCase":"key"},"outputFolder":{"type":"string","description":"Bootstrapper Folder","ignoreCase":"key"},"buildBranch":{"type":"string","description":"VS Branch","ignoreCase":"key"},"buildNumber":{"type":"string","description":"VS Build Number","ignoreCase":"key"},"bootstrapperCoreVersion":{"type":"string","description":"Bootstrapper Core Version","ignoreCase":"key"},"bootstrapperCoreFeedSource":{"type":"string","description":"Bootstrapper NuGet Feed","ignoreCase":"key"},"bootstrapperCoreDependenciesFeedSource":{"type":"string","description":"Bootstrapper Dependencies NuGet Feed","ignoreCase":"key"},"nugetOrgPublicFeedSource":{"type":"string","description":"NuGet.org feed location","ignoreCase":"key"}},"additionalProperties":false,"required":["manifests","outputFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Download artifacts from file share\n\nDownload artifacts from a file share, like \\\\share\\drop","ignoreCase":"value","pattern":"^DownloadFileshareArtifacts@1$"},"inputs":{"description":"Download artifacts from file share inputs","properties":{"filesharePath":{"type":"string","description":"File share path","ignoreCase":"key"},"artifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"},"itemPattern":{"type":"string","description":"Matching pattern","ignoreCase":"key"},"downloadPath":{"type":"string","description":"Download path","ignoreCase":"key"},"parallelizationLimit":{"type":"string","description":"Parallelization limit","ignoreCase":"key"}},"additionalProperties":false,"required":["filesharePath","artifactName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Kubectl\n\nDeploy, configure, update a Kubernetes cluster in Azure Container Service by running kubectl commands","ignoreCase":"value","pattern":"^Kubernetes@1$"},"inputs":{"description":"Kubectl inputs","properties":{"connectionType":{"description":"Service connection type","ignoreCase":"all","enum":["Azure Resource Manager","Kubernetes Service Connection","None"]},"kubernetesServiceEndpoint":{"type":"string","description":"Kubernetes service connection","ignoreCase":"key"},"azureSubscriptionEndpoint":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"azureResourceGroup":{"type":"string","description":"Resource group","ignoreCase":"key"},"kubernetesCluster":{"type":"string","description":"Kubernetes cluster","ignoreCase":"key"},"useClusterAdmin":{"type":"boolean","description":"Use cluster admin credentials","ignoreCase":"key"},"namespace":{"type":"string","description":"Namespace","ignoreCase":"key"},"command":{"description":"Command","ignoreCase":"all","enum":["apply","create","delete","exec","expose","get","login","logout","logs","run","set","top"]},"useConfigurationFile":{"type":"boolean","description":"Use configuration","ignoreCase":"key"},"configurationType":{"description":"Configuration type","ignoreCase":"all","enum":["configuration","inline"]},"configuration":{"type":"string","description":"File path","ignoreCase":"key"},"inline":{"type":"string","description":"Inline configuration","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"secretType":{"description":"Type of secret","ignoreCase":"all","enum":["dockerRegistry","generic"]},"secretArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"containerRegistryType":{"description":"Container registry type","ignoreCase":"all","enum":["Azure Container Registry","Container Registry"]},"dockerRegistryEndpoint":{"type":"string","description":"Docker registry service connection","ignoreCase":"key"},"azureSubscriptionEndpointForSecrets":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"azureContainerRegistry":{"type":"string","description":"Azure container registry","ignoreCase":"key"},"secretName":{"type":"string","description":"Secret name","ignoreCase":"key"},"forceUpdate":{"type":"boolean","description":"Force update secret","ignoreCase":"key"},"configMapName":{"type":"string","description":"ConfigMap name","ignoreCase":"key"},"forceUpdateConfigMap":{"type":"boolean","description":"Force update configmap","ignoreCase":"key"},"useConfigMapFile":{"type":"boolean","description":"Use file","ignoreCase":"key"},"configMapFile":{"type":"string","description":"ConfigMap file","ignoreCase":"key"},"configMapArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"versionOrLocation":{"description":"Kubectl","ignoreCase":"all","enum":["version","location"]},"versionSpec":{"type":"string","description":"Version spec","ignoreCase":"key"},"checkLatest":{"type":"boolean","description":"Check for latest version","ignoreCase":"key"},"specifyLocation":{"type":"string","description":"Path to kubectl","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"outputFormat":{"description":"Output format","ignoreCase":"all","enum":["json","yaml","none"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Kubectl\n\nDeploy, configure, update a Kubernetes cluster in Azure Container Service by running kubectl commands","ignoreCase":"value","pattern":"^Kubernetes@0$"},"inputs":{"description":"Kubectl inputs","properties":{"kubernetesServiceConnection":{"type":"string","description":"Kubernetes service connection","ignoreCase":"key","aliases":["kubernetesServiceEndpoint"]},"namespace":{"type":"string","description":"Namespace","ignoreCase":"key"},"command":{"description":"Command","ignoreCase":"all","enum":["apply","create","delete","exec","expose","get","logs","run","set","top"]},"useConfigurationFile":{"type":"boolean","description":"Use Configuration files","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration file","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"secretType":{"description":"Type of secret","ignoreCase":"all","enum":["dockerRegistry","generic"]},"secretArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"containerRegistryType":{"description":"Container Registry type","ignoreCase":"all","enum":["Azure Container Registry","Container Registry"]},"dockerRegistryConnection":{"type":"string","description":"Docker Registry service connection","ignoreCase":"key","aliases":["dockerRegistryEndpoint"]},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["azureSubscriptionEndpoint"]},"azureContainerRegistry":{"type":"string","description":"Azure Container Registry","ignoreCase":"key"},"secretName":{"type":"string","description":"Secret name","ignoreCase":"key"},"forceUpdate":{"type":"boolean","description":"Force update secret","ignoreCase":"key"},"configMapName":{"type":"string","description":"ConfigMap name","ignoreCase":"key"},"forceUpdateConfigMap":{"type":"boolean","description":"Force update configmap","ignoreCase":"key"},"useConfigMapFile":{"type":"boolean","description":"Use file","ignoreCase":"key"},"configMapFile":{"type":"string","description":"ConfigMap file","ignoreCase":"key"},"configMapArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"versionOrLocation":{"description":"Kubectl","ignoreCase":"all","enum":["version","location"]},"versionSpec":{"type":"string","description":"Version spec","ignoreCase":"key"},"checkLatest":{"type":"boolean","description":"Check for latest version","ignoreCase":"key"},"specifyLocation":{"type":"string","description":"Path to Kubectl","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"outputFormat":{"description":"Output format","ignoreCase":"all","enum":["json","yaml"]},"kubectlOutput":{"type":"string","description":"Output variable name","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure IoT Edge\n\nBuild and deploy an Azure IoT Edge image","ignoreCase":"value","pattern":"^AzureIoTEdge@2$"},"inputs":{"description":"Azure IoT Edge inputs","properties":{"action":{"description":"Action","ignoreCase":"all","enum":["Build module images","Push module images","Generate deployment manifest","Deploy to IoT Edge devices"]},"deploymentFilePath":{"type":"string","description":"Deployment file","ignoreCase":"key"},"azureSubscription":{"type":"string","description":"Azure subscription contains IoT Hub","ignoreCase":"key","aliases":["connectedServiceNameARM"]},"iothubname":{"type":"string","description":"IoT Hub name","ignoreCase":"key"},"deploymentid":{"type":"string","description":"IoT Edge deployment ID","ignoreCase":"key"},"priority":{"type":"string","description":"IoT Edge deployment priority","ignoreCase":"key"},"deviceOption":{"description":"Choose single/multiple device","ignoreCase":"all","enum":["Single Device","Multiple Devices"]},"deviceId":{"type":"string","description":"IoT Edge device ID","ignoreCase":"key"},"targetcondition":{"type":"string","description":"IoT Edge device target condition","ignoreCase":"key"},"containerregistrytype":{"description":"Container registry type","ignoreCase":"all","enum":["Azure Container Registry","Generic Container Registry"]},"dockerRegistryConnection":{"type":"string","description":"Docker Registry Connection","ignoreCase":"key","aliases":["dockerRegistryEndpoint"]},"azureSubscriptionEndpoint":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"azureContainerRegistry":{"type":"string","description":"Azure Container Registry","ignoreCase":"key"},"templateFilePath":{"type":"string","description":".template.json file","ignoreCase":"key"},"defaultPlatform":{"description":"Default platform","ignoreCase":"all","enum":["amd64","windows-amd64","arm32v7","arm64v8"]},"fillRegistryCredential":{"description":"Add registry credential to deployment manifest","ignoreCase":"all","enum":["true","false"]},"deploymentManifestOutputPath":{"type":"string","description":"Output path","ignoreCase":"key"},"validateGeneratedDeploymentManifest":{"description":"Validate the schema of generated deployment manifest","ignoreCase":"all","enum":["true","false"]},"bypassModules":{"type":"string","description":"Bypass module(s)","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Service Fabric Compose deploy\n\nDeploy a Docker Compose application to an Azure Service Fabric cluster","ignoreCase":"value","pattern":"^ServiceFabricComposeDeploy@0$"},"inputs":{"description":"Service Fabric Compose deploy inputs","properties":{"clusterConnection":{"type":"string","description":"Cluster Service Connection","ignoreCase":"key","aliases":["serviceConnectionName"]},"composeFilePath":{"type":"string","description":"Compose File Path","ignoreCase":"key"},"applicationName":{"type":"string","description":"Application Name","ignoreCase":"key"},"registryCredentials":{"description":"Registry Credentials Source","ignoreCase":"all","enum":["AzureResourceManagerEndpoint","ContainerRegistryEndpoint","UsernamePassword","None"]},"dockerRegistryConnection":{"type":"string","description":"Docker Registry Service Connection","ignoreCase":"key","aliases":["dockerRegistryEndpointName"]},"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["azureSubscriptionEndpoint"]},"registryUserName":{"type":"string","description":"Registry User Name","ignoreCase":"key"},"registryPassword":{"type":"string","description":"Registry Password","ignoreCase":"key"},"passwordEncrypted":{"type":"boolean","description":"Password Encrypted","ignoreCase":"key"},"upgrade":{"type":"boolean","description":"Upgrade","ignoreCase":"key"},"deployTimeoutSec":{"type":"string","description":"Deploy Timeout (s)","ignoreCase":"key"},"removeTimeoutSec":{"type":"string","description":"Remove Timeout (s)","ignoreCase":"key"},"getStatusTimeoutSec":{"type":"string","description":"Get Status Timeout (s)","ignoreCase":"key"}},"additionalProperties":false,"required":["clusterConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Android signing\n\nSign and align Android APK files","ignoreCase":"value","pattern":"^AndroidSigning@2$"},"inputs":{"description":"Android signing inputs","properties":{"apkFiles":{"type":"string","description":"APK files","ignoreCase":"key","aliases":["files"]},"jarsign":{"type":"boolean","description":"Sign the APK","ignoreCase":"key"},"jarsignerKeystoreFile":{"type":"string","description":"Keystore file","ignoreCase":"key","aliases":["keystoreFile"]},"jarsignerKeystorePassword":{"type":"string","description":"Keystore password","ignoreCase":"key","aliases":["keystorePass"]},"jarsignerKeystoreAlias":{"type":"string","description":"Alias","ignoreCase":"key","aliases":["keystoreAlias"]},"jarsignerKeyPassword":{"type":"string","description":"Key password","ignoreCase":"key","aliases":["keyPass"]},"jarsignerArguments":{"type":"string","description":"Jarsigner arguments","ignoreCase":"key"},"zipalign":{"type":"boolean","description":"Zipalign","ignoreCase":"key"},"zipalignFile":{"type":"string","description":"Zipalign location","ignoreCase":"key","aliases":["zipalignLocation"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Android Signing\n\nSign and align Android APK files","ignoreCase":"value","pattern":"^AndroidSigning@1$"},"inputs":{"description":"Android Signing inputs","properties":{"files":{"type":"string","description":"APK Files","ignoreCase":"key"},"jarsign":{"type":"boolean","description":"Sign the APK","ignoreCase":"key"},"keystoreFile":{"type":"string","description":"Keystore File","ignoreCase":"key"},"keystorePass":{"type":"string","description":"Keystore Password","ignoreCase":"key"},"keystoreAlias":{"type":"string","description":"Alias","ignoreCase":"key"},"keyPass":{"type":"string","description":"Key Password","ignoreCase":"key"},"jarsignerArguments":{"type":"string","description":"Jarsigner Arguments","ignoreCase":"key"},"zipalign":{"type":"boolean","description":"Zipalign","ignoreCase":"key"},"zipalignLocation":{"type":"string","description":"Zipalign Location","ignoreCase":"key"}},"additionalProperties":false,"required":["files"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Android signing\n\nSign and align Android APK files","ignoreCase":"value","pattern":"^AndroidSigning@3$"},"inputs":{"description":"Android signing inputs","properties":{"apkFiles":{"type":"string","description":"APK files","ignoreCase":"key","aliases":["files"]},"apksign":{"type":"boolean","description":"Sign the APK","ignoreCase":"key"},"apksignerKeystoreFile":{"type":"string","description":"Keystore file","ignoreCase":"key","aliases":["keystoreFile"]},"apksignerKeystorePassword":{"type":"string","description":"Keystore password","ignoreCase":"key","aliases":["keystorePass"]},"apksignerKeystoreAlias":{"type":"string","description":"Alias","ignoreCase":"key","aliases":["keystoreAlias"]},"apksignerKeyPassword":{"type":"string","description":"Key password","ignoreCase":"key","aliases":["keyPass"]},"apksignerVersion":{"type":"string","description":"apksigner version","ignoreCase":"key"},"apksignerArguments":{"type":"string","description":"apksigner arguments","ignoreCase":"key"},"apksignerFile":{"type":"string","description":"apksigner location","ignoreCase":"key","aliases":["apksignerLocation"]},"zipalign":{"type":"boolean","description":"Zipalign","ignoreCase":"key"},"zipalignVersion":{"type":"string","description":"Zipalign version","ignoreCase":"key"},"zipalignFile":{"type":"string","description":"Zipalign location","ignoreCase":"key","aliases":["zipalignLocation"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download pipeline artifact\n\nDownload a named artifact from a pipeline to a local path","ignoreCase":"value","pattern":"^DownloadPipelineArtifact@1$"},"inputs":{"description":"Download pipeline artifact inputs","properties":{"buildType":{"description":"Download artifacts produced by","ignoreCase":"all","enum":["current","specific"]},"project":{"type":"string","description":"Project","ignoreCase":"key"},"pipeline":{"type":"string","description":"Build pipeline","ignoreCase":"key","aliases":["definition"]},"specificBuildWithTriggering":{"type":"boolean","description":"When appropriate, download artifacts from the triggering build.","ignoreCase":"key"},"buildVersionToDownload":{"description":"Build version to download","ignoreCase":"all","enum":["latest","latestFromBranch","specific"]},"branchName":{"type":"string","description":"Branch name","ignoreCase":"key"},"pipelineId":{"type":"string","description":"Build","ignoreCase":"key","aliases":["buildId"]},"tags":{"type":"string","description":"Build Tags","ignoreCase":"key"},"artifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"},"itemPattern":{"type":"string","description":"Matching pattern","ignoreCase":"key"},"targetPath":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["downloadPath"]}},"additionalProperties":false,"required":[]}},"deprecationMessage":"DownloadPipelineArtifact is deprecated - Download a named artifact from a pipeline to a local path","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download pipeline artifact\n\nDownloads an artifact associated with a pipeline","ignoreCase":"value","pattern":"^DownloadPipelineArtifact@0$"},"inputs":{"description":"Download pipeline artifact inputs","properties":{"pipelineId":{"type":"string","description":"The specific pipeline to download from","ignoreCase":"key"},"artifactName":{"type":"string","description":"The name of artifact to download.","ignoreCase":"key"},"targetPath":{"type":"string","description":"Path to download to","ignoreCase":"key"}},"additionalProperties":false,"required":["targetPath"]}},"deprecationMessage":"DownloadPipelineArtifact is deprecated - Downloads an artifact associated with a pipeline","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Download Pipeline Artifacts\n\nDownload build and pipeline artifacts","ignoreCase":"value","pattern":"^DownloadPipelineArtifact@2$"},"inputs":{"description":"Download Pipeline Artifacts inputs","properties":{"buildType":{"description":"Download artifacts produced by","ignoreCase":"all","enum":["current","specific"],"aliases":["source"]},"project":{"type":"string","description":"Project","ignoreCase":"key"},"definition":{"type":"string","description":"Build pipeline","ignoreCase":"key","aliases":["pipeline"]},"specificBuildWithTriggering":{"type":"boolean","description":"When appropriate, download artifacts from the triggering build.","ignoreCase":"key","aliases":["preferTriggeringPipeline"]},"buildVersionToDownload":{"description":"Build version to download","ignoreCase":"all","enum":["latest","latestFromBranch","specific"],"aliases":["runVersion"]},"branchName":{"type":"string","description":"Branch name","ignoreCase":"key","aliases":["runBranch"]},"pipelineId":{"type":"string","description":"Build","ignoreCase":"key","aliases":["runId","buildId"]},"tags":{"type":"string","description":"Build Tags","ignoreCase":"key"},"allowPartiallySucceededBuilds":{"type":"boolean","description":"Download artifacts from partially succeeded builds.","ignoreCase":"key"},"allowFailedBuilds":{"type":"boolean","description":"Download artifacts from failed builds.","ignoreCase":"key"},"artifactName":{"type":"string","description":"Artifact name","ignoreCase":"key","aliases":["artifact"]},"itemPattern":{"type":"string","description":"Matching patterns","ignoreCase":"key","aliases":["patterns"]},"targetPath":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["path","downloadPath"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Use Python version\n\nUse the specified version of Python from the tool cache, optionally adding it to the PATH","ignoreCase":"value","pattern":"^UsePythonVersion@0$"},"inputs":{"description":"Use Python version inputs","properties":{"versionSpec":{"type":"string","description":"Version spec","ignoreCase":"key"},"addToPath":{"type":"boolean","description":"Add to PATH","ignoreCase":"key"},"architecture":{"description":"Architecture","ignoreCase":"all","enum":["x86","x64"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Accessibility Insights Azure DevOps Task\n\nScan accessibility issues in an Azure DevOps pipeline","ignoreCase":"value","pattern":"^accessibility-insights@1$"},"inputs":{"description":"Accessibility Insights Azure DevOps Task inputs","properties":{"repoServiceConnectionName":{"type":"string","description":"Azure Repos Connection","ignoreCase":"key"},"outputDir":{"type":"string","description":"Output Directory","ignoreCase":"key"},"siteDir":{"type":"string","description":"Site Directory","ignoreCase":"key"},"scanUrlRelativePath":{"type":"string","description":"Scan URL Relative Path","ignoreCase":"key"},"chromePath":{"type":"string","description":"Chrome Path","ignoreCase":"key"},"url":{"type":"string","description":"Website URL","ignoreCase":"key"},"maxUrls":{"type":"integer","description":"Maximum number of URLs","ignoreCase":"key"},"discoveryPatterns":{"type":"string","description":"Discovery Patterns","ignoreCase":"key"},"inputFile":{"type":"string","description":"Input File","ignoreCase":"key"},"inputUrls":{"type":"string","description":"Input URLs","ignoreCase":"key"},"localhostPort":{"type":"integer","description":"Localhost Port","ignoreCase":"key"},"scanTimeout":{"type":"integer","description":"Scan Timeout","ignoreCase":"key"},"failOnAccessibilityError":{"type":"boolean","description":"Fail on Accessibility Error","ignoreCase":"key"},"baselineFile":{"type":"string","description":"Baseline File Path","ignoreCase":"key"},"singleWorker":{"type":"boolean","description":"Uses a single crawler worker.","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Upload Azure DevOps Drop\n\nUploads a Folder to the Azure DevOps Drop Service","ignoreCase":"value","pattern":"^MicroBuildUploadVstsDropFolder@2$"},"inputs":{"description":"MicroBuild Upload Azure DevOps Drop inputs","properties":{"DropFolder":{"type":"string","description":"Drop Folder","ignoreCase":"key"},"DropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"AccessToken":{"type":"string","description":"Drop Service Access Token","ignoreCase":"key"},"DropServiceUri":{"type":"string","description":"Drop Service Uri","ignoreCase":"key"},"VSDropServiceUri":{"type":"string","description":"VSDrop Service Uri","ignoreCase":"key"}},"additionalProperties":false,"required":["DropFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Upload Azure DevOps Drop\n\nUploads a Folder to the Azure DevOps Drop Service","ignoreCase":"value","pattern":"^MicroBuildUploadVstsDropFolder@1$"},"inputs":{"description":"MicroBuild Upload Azure DevOps Drop inputs","properties":{"DropFolder":{"type":"string","description":"Drop Folder","ignoreCase":"key"},"DropName":{"type":"string","description":"Drop Name","ignoreCase":"key"},"AccessToken":{"type":"string","description":"Drop Service Access Token","ignoreCase":"key"},"DropServiceUri":{"type":"string","description":"Drop Service Uri","ignoreCase":"key"},"VSDropServiceUri":{"type":"string","description":"VSDrop Service Uri","ignoreCase":"key"}},"additionalProperties":false,"required":["DropFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Service Fabric PowerShell\n\nRun a PowerShell script in the context of an Azure Service Fabric cluster connection","ignoreCase":"value","pattern":"^ServiceFabricPowerShell@1$"},"inputs":{"description":"Service Fabric PowerShell inputs","properties":{"clusterConnection":{"type":"string","description":"Cluster Service Connection","ignoreCase":"key","aliases":["serviceConnectionName"]},"ScriptType":{"description":"Script Type","ignoreCase":"all","enum":["FilePath","InlineScript"]},"ScriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"Inline":{"type":"string","description":"Inline Script","ignoreCase":"key"},"ScriptArguments":{"type":"string","description":"Script Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["clusterConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Visual Studio Test\n\nRun tests with Visual Studio test runner","ignoreCase":"value","pattern":"^VSTest@1$"},"inputs":{"description":"Visual Studio Test inputs","properties":{"testAssembly":{"type":"string","description":"Test Assembly","ignoreCase":"key"},"testFiltercriteria":{"type":"string","description":"Test Filter criteria","ignoreCase":"key"},"runSettingsFile":{"type":"string","description":"Run Settings File","ignoreCase":"key"},"overrideTestrunParameters":{"type":"string","description":"Override TestRun Parameters","ignoreCase":"key"},"codeCoverageEnabled":{"type":"boolean","description":"Code Coverage Enabled","ignoreCase":"key"},"runInParallel":{"type":"boolean","description":"Run In Parallel","ignoreCase":"key"},"vstestLocationMethod":{"description":"VSTest","ignoreCase":"all","enum":["version","location"]},"vsTestVersion":{"description":"VSTest version","ignoreCase":"all","enum":["latest","14.0","12.0"]},"vstestLocation":{"type":"string","description":"Path to vstest.console.exe","ignoreCase":"key"},"pathtoCustomTestAdapters":{"type":"string","description":"Path to Custom Test Adapters","ignoreCase":"key"},"otherConsoleOptions":{"type":"string","description":"Other console options","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"platform":{"type":"string","description":"Platform","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"publishRunAttachments":{"type":"boolean","description":"Upload Test Attachments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Visual Studio Test\n\nRun unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).","ignoreCase":"value","pattern":"^VSTest@2$"},"inputs":{"description":"Visual Studio Test inputs","properties":{"testSelector":{"description":"Select tests using","ignoreCase":"all","enum":["testAssemblies","testPlan","testRun"]},"testAssemblyVer2":{"type":"string","description":"Test files","ignoreCase":"key"},"testPlan":{"type":"string","description":"Test plan","ignoreCase":"key"},"testSuite":{"type":"string","description":"Test suite","ignoreCase":"key"},"testConfiguration":{"type":"string","description":"Test configuration","ignoreCase":"key"},"tcmTestRun":{"type":"string","description":"Test Run","ignoreCase":"key"},"searchFolder":{"type":"string","description":"Search folder","ignoreCase":"key"},"resultsFolder":{"type":"string","description":"Test results folder","ignoreCase":"key"},"testFiltercriteria":{"type":"string","description":"Test filter criteria","ignoreCase":"key"},"runOnlyImpactedTests":{"type":"boolean","description":"Run only impacted tests","ignoreCase":"key"},"runAllTestsAfterXBuilds":{"type":"string","description":"Number of builds after which all tests should be run","ignoreCase":"key"},"uiTests":{"type":"boolean","description":"Test mix contains UI tests","ignoreCase":"key"},"vstestLocationMethod":{"description":"Select test platform using","ignoreCase":"all","enum":["version","location"]},"vsTestVersion":{"description":"Test platform version","ignoreCase":"all","enum":["latest","16.0","15.0","14.0","toolsInstaller"]},"vstestLocation":{"type":"string","description":"Path to vstest.console.exe","ignoreCase":"key"},"runSettingsFile":{"type":"string","description":"Settings file","ignoreCase":"key"},"overrideTestrunParameters":{"type":"string","description":"Override test run parameters","ignoreCase":"key"},"pathtoCustomTestAdapters":{"type":"string","description":"Path to custom test adapters","ignoreCase":"key"},"runInParallel":{"type":"boolean","description":"Run tests in parallel on multi-core machines","ignoreCase":"key"},"runTestsInIsolation":{"type":"boolean","description":"Run tests in isolation","ignoreCase":"key"},"codeCoverageEnabled":{"type":"boolean","description":"Code coverage enabled","ignoreCase":"key"},"otherConsoleOptions":{"type":"string","description":"Other console options","ignoreCase":"key"},"distributionBatchType":{"description":"Batch tests","ignoreCase":"all","enum":["basedOnTestCases","basedOnExecutionTime","basedOnAssembly"]},"batchingBasedOnAgentsOption":{"description":"Batch options","ignoreCase":"all","enum":["autoBatchSize","customBatchSize"]},"customBatchSizeValue":{"type":"string","description":"Number of tests per batch","ignoreCase":"key"},"batchingBasedOnExecutionTimeOption":{"description":"Batch options","ignoreCase":"all","enum":["autoBatchSize","customTimeBatchSize"]},"customRunTimePerBatchValue":{"type":"string","description":"Running time (sec) per batch","ignoreCase":"key"},"dontDistribute":{"type":"boolean","description":"Replicate tests instead of distributing when multiple agents are used in the job","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"platform":{"type":"string","description":"Build platform","ignoreCase":"key"},"configuration":{"type":"string","description":"Build configuration","ignoreCase":"key"},"publishRunAttachments":{"type":"boolean","description":"Upload test attachments","ignoreCase":"key"},"failOnMinTestsNotRun":{"type":"boolean","description":"Fail the task if a minimum number of tests are not run.","ignoreCase":"key"},"minimumExpectedTests":{"type":"string","description":"Minimum # of tests","ignoreCase":"key"},"diagnosticsEnabled":{"type":"boolean","description":"Collect advanced diagnostics in case of catastrophic failures","ignoreCase":"key"},"collectDumpOn":{"description":"Collect process dump and attach to test run report","ignoreCase":"all","enum":["onAbortOnly","always","never"]},"rerunFailedTests":{"type":"boolean","description":"Rerun failed tests","ignoreCase":"key"},"rerunType":{"description":"Do not rerun if test failures exceed specified threshold","ignoreCase":"all","enum":["basedOnTestFailurePercentage","basedOnTestFailureCount"]},"rerunFailedThreshold":{"type":"string","description":"% failure","ignoreCase":"key"},"rerunFailedTestCasesMaxLimit":{"type":"string","description":"# of failed tests","ignoreCase":"key"},"rerunMaxAttempts":{"type":"string","description":"Maximum # of attempts","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Manual validation\n\n[PREVIEW] Pause a pipeline run to wait for manual interaction. Works only with YAML pipelines.","ignoreCase":"value","pattern":"^ManualValidation@0$"},"inputs":{"description":"Manual validation inputs","properties":{"notifyUsers":{"type":"string","description":"Notify users","ignoreCase":"key"},"instructions":{"type":"string","description":"Instructions","ignoreCase":"key"},"onTimeout":{"description":"On timeout","ignoreCase":"all","enum":["reject","resume"]}},"additionalProperties":false,"required":["notifyUsers"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Promote Nuget Packages\n\nPromote nuget packages to a view in VS and VS-CoreXTFeeds","ignoreCase":"value","pattern":"^MicroBuildPromoteNugetPackages@2$"},"inputs":{"description":"MicroBuild Promote Nuget Packages inputs","properties":{"AccessToken":{"type":"string","description":"Access Token to Modify the Feed","ignoreCase":"key"},"PackageConfigFiles":{"type":"string","description":"Full Paths of Packages Config Files","ignoreCase":"key"},"SolutionFiles":{"type":"string","description":"Full Path of Solution Files Containing Package References","ignoreCase":"key"},"View":{"type":"string","description":"View Name","ignoreCase":"key"}},"additionalProperties":false,"required":["View"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Ant\n\nBuild with Apache Ant","ignoreCase":"value","pattern":"^Ant@1$"},"inputs":{"description":"Ant inputs","properties":{"buildFile":{"type":"string","description":"Ant build file","ignoreCase":"key","aliases":["antBuildFile"]},"options":{"type":"string","description":"Options","ignoreCase":"key"},"targets":{"type":"string","description":"Target(s)","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test results files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test run title","ignoreCase":"key"},"codeCoverageToolOptions":{"description":"Code coverage tool","ignoreCase":"all","enum":["None","Cobertura","JaCoCo"],"aliases":["codeCoverageTool"]},"codeCoverageClassFilesDirectories":{"type":"string","description":"Class files directories","ignoreCase":"key","aliases":["classFilesDirectories"]},"codeCoverageClassFilter":{"type":"string","description":"Class inclusion/exclusion filters","ignoreCase":"key","aliases":["classFilter"]},"codeCoverageSourceDirectories":{"type":"string","description":"Source files directories","ignoreCase":"key","aliases":["srcDirectories"]},"codeCoverageFailIfEmpty":{"type":"boolean","description":"Fail when code coverage results are missing","ignoreCase":"key","aliases":["failIfCoverageEmpty"]},"antHomeDirectory":{"type":"string","description":"Set ANT_HOME path","ignoreCase":"key","aliases":["antHomeUserInputPath"]},"javaHomeOption":{"description":"Set JAVA_HOME by","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["javaHomeSelection"]},"jdkVersionOption":{"description":"JDK version","ignoreCase":"all","enum":["default","1.11","1.10","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkUserInputDirectory":{"type":"string","description":"JDK path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Visual Studio test agent deployment\n\nDeprecated: Instead, use the 'Visual Studio Test' task to run unit and functional tests","ignoreCase":"value","pattern":"^DeployVisualStudioTestAgent@2$"},"inputs":{"description":"Visual Studio test agent deployment inputs","properties":{"testMachines":{"type":"string","description":"Machines","ignoreCase":"key"},"adminUserName":{"type":"string","description":"Admin login","ignoreCase":"key"},"adminPassword":{"type":"string","description":"Admin password","ignoreCase":"key"},"winRmProtocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"testCertificate":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"machineUserName":{"type":"string","description":"Username","ignoreCase":"key"},"machinePassword":{"type":"string","description":"Password","ignoreCase":"key"},"runAsProcess":{"type":"boolean","description":"Run UI tests","ignoreCase":"key"},"isDataCollectionOnly":{"type":"boolean","description":"Enable data collection only","ignoreCase":"key"},"testPlatform":{"description":"Test agent version","ignoreCase":"all","enum":["15.0","14.0"]},"agentLocation":{"type":"string","description":"Test agent location","ignoreCase":"key"},"updateTestAgent":{"type":"boolean","description":"Update test agent","ignoreCase":"key"}},"additionalProperties":false,"required":["testMachines","adminUserName","adminPassword","machineUserName","machinePassword"]}},"deprecationMessage":"DeployVisualStudioTestAgent is deprecated - Deprecated: Instead, use the 'Visual Studio Test' task to run unit and functional tests","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Visual Studio Test Agent Deployment\n\nDeploy and configure Test Agent to run tests on a set of machines","ignoreCase":"value","pattern":"^DeployVisualStudioTestAgent@1$"},"inputs":{"description":"Visual Studio Test Agent Deployment inputs","properties":{"testMachineGroup":{"type":"string","description":"Machines","ignoreCase":"key"},"adminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"adminPassword":{"type":"string","description":"Admin Password","ignoreCase":"key"},"winRmProtocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"testCertificate":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"resourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"testMachines":{"type":"string","description":"Filter Criteria","ignoreCase":"key"},"machineUserName":{"type":"string","description":"Username","ignoreCase":"key"},"machinePassword":{"type":"string","description":"Password","ignoreCase":"key"},"runAsProcess":{"type":"boolean","description":"Interactive Process","ignoreCase":"key"},"agentLocation":{"type":"string","description":"Test Agent Location","ignoreCase":"key"},"updateTestAgent":{"type":"boolean","description":"Update Test Agent","ignoreCase":"key"},"isDataCollectionOnly":{"type":"boolean","description":"Enable Data Collection Only","ignoreCase":"key"}},"additionalProperties":false,"required":["testMachineGroup","machineUserName","machinePassword"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Conda environment\n\nThis task is deprecated. Use `conda` directly in script to work with Anaconda environments.","ignoreCase":"value","pattern":"^CondaEnvironment@1$"},"inputs":{"description":"Conda environment inputs","properties":{"createCustomEnvironment":{"type":"boolean","description":"Create a custom environment","ignoreCase":"key"},"environmentName":{"type":"string","description":"Environment name","ignoreCase":"key"},"packageSpecs":{"type":"string","description":"Package specs","ignoreCase":"key"},"updateConda":{"type":"boolean","description":"Update to the latest Conda","ignoreCase":"key"},"installOptions":{"type":"string","description":"Other options for `conda install`","ignoreCase":"key"},"createOptions":{"type":"string","description":"Other options for `conda create`","ignoreCase":"key"},"cleanEnvironment":{"type":"boolean","description":"Clean the environment","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"CondaEnvironment is deprecated - This task is deprecated. Use `conda` directly in script to work with Anaconda environments.","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Conda environment\n\nCreate and activate a Conda environment","ignoreCase":"value","pattern":"^CondaEnvironment@0$"},"inputs":{"description":"Conda environment inputs","properties":{"environmentName":{"type":"string","description":"Environment name","ignoreCase":"key"},"packageSpecs":{"type":"string","description":"Package specs","ignoreCase":"key"},"updateConda":{"type":"boolean","description":"Update to the latest Conda","ignoreCase":"key"},"createOptions":{"type":"string","description":"Environment creation options","ignoreCase":"key"},"cleanEnvironment":{"type":"boolean","description":"Clean the environment","ignoreCase":"key"}},"additionalProperties":false,"required":["environmentName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Batch script\n\nRun a Windows command or batch script and optionally allow it to change the environment","ignoreCase":"value","pattern":"^BatchScript@1$"},"inputs":{"description":"Batch script inputs","properties":{"filename":{"type":"string","description":"Path","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"modifyEnvironment":{"type":"boolean","description":"Modify Environment","ignoreCase":"key"},"workingFolder":{"type":"string","description":"Working folder","ignoreCase":"key"},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":["filename"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Download Github Npm Package\n\nInstall npm packages from GitHub.","ignoreCase":"value","pattern":"^DownloadGithubNpmPackage@1$"},"inputs":{"description":"Download Github Npm Package inputs","properties":{"packageName":{"type":"string","description":"Package Name","ignoreCase":"key"},"version":{"type":"string","description":"Package Version","ignoreCase":"key"},"externalRegistryCredentials":{"type":"string","description":"Credentials for registry from GitHub","ignoreCase":"key","aliases":["externalEndpoints"]},"installDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["packagesDirectory"]}},"additionalProperties":false,"required":["packageName","version","externalRegistryCredentials"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Visual Studio build\n\nBuild with MSBuild and set the Visual Studio version property","ignoreCase":"value","pattern":"^VSBuild@1$"},"inputs":{"description":"Visual Studio build inputs","properties":{"solution":{"type":"string","description":"Solution","ignoreCase":"key"},"vsVersion":{"description":"Visual Studio Version","ignoreCase":"all","enum":["latest","17.0","16.0","15.0","14.0","12.0","11.0"]},"msbuildArgs":{"type":"string","description":"MSBuild Arguments","ignoreCase":"key"},"platform":{"type":"string","description":"Platform","ignoreCase":"key"},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"clean":{"type":"boolean","description":"Clean","ignoreCase":"key"},"maximumCpuCount":{"type":"boolean","description":"Build in Parallel","ignoreCase":"key"},"restoreNugetPackages":{"type":"boolean","description":"Restore NuGet Packages","ignoreCase":"key"},"msbuildArchitecture":{"description":"MSBuild Architecture","ignoreCase":"all","enum":["x86","x64"]},"logProjectEvents":{"type":"boolean","description":"Record Project Details","ignoreCase":"key"},"createLogFile":{"type":"boolean","description":"Create Log File","ignoreCase":"key"},"logFileVerbosity":{"description":"Log File Verbosity","ignoreCase":"all","enum":["quiet","minimal","normal","detailed","diagnostic"]},"enableDefaultLogger":{"type":"boolean","description":"Enable Default Logger","ignoreCase":"key"},"customVersion":{"type":"string","description":"Custom Version","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Key Vault\n\nDownload Azure Key Vault secrets","ignoreCase":"value","pattern":"^AzureKeyVault@1$"},"inputs":{"description":"Azure Key Vault inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"KeyVaultName":{"type":"string","description":"Key vault","ignoreCase":"key"},"SecretsFilter":{"description":"Secrets filter","ignoreCase":"all","enum":["EditableOptions"]},"RunAsPreJob":{"description":"Make secrets available to whole job","ignoreCase":"all","enum":["EditableOptions"]}},"additionalProperties":false,"required":["azureSubscription","KeyVaultName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Key Vault\n\nDownload Azure Key Vault secrets","ignoreCase":"value","pattern":"^AzureKeyVault@2$"},"inputs":{"description":"Azure Key Vault inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"KeyVaultName":{"type":"string","description":"Key vault","ignoreCase":"key"},"SecretsFilter":{"description":"Secrets filter","ignoreCase":"all","enum":["EditableOptions"]},"RunAsPreJob":{"description":"Make secrets available to whole job","ignoreCase":"all","enum":["EditableOptions"]}},"additionalProperties":false,"required":["azureSubscription","KeyVaultName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":".NET Core sdk/runtime installer\n\nAcquire a specific version of the .NET Core SDK from the internet or local cache and add it to the PATH","ignoreCase":"value","pattern":"^DotNetCoreInstaller@1$"},"inputs":{"description":".NET Core sdk/runtime installer inputs","properties":{"packageType":{"description":"Package to install","ignoreCase":"all","enum":["runtime","sdk"]},"version":{"type":"string","description":"Version","ignoreCase":"key"},"includePreviewVersions":{"type":"boolean","description":"Include Preview Versions","ignoreCase":"key"},"installationPath":{"type":"string","description":"Path To Install .Net Core","ignoreCase":"key"},"performMultiLevelLookup":{"type":"boolean","description":"Perform Multi Level Lookup","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"DotNetCoreInstaller is deprecated - Acquire a specific version of the .NET Core SDK from the internet or local cache and add it to the PATH","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Use .NET Core\n\nAcquires a specific version of the .NET Core SDK from the internet or the local cache and adds it to the PATH. Use this task to change the version of .NET Core used in subsequent tasks. Additionally provides proxy support.","ignoreCase":"value","pattern":"^UseDotNet@2$"},"inputs":{"description":"Use .NET Core inputs","properties":{"packageType":{"description":"Package to install","ignoreCase":"all","enum":["runtime","sdk"]},"useGlobalJson":{"type":"boolean","description":"Use global json","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"},"version":{"type":"string","description":"Version","ignoreCase":"key"},"vsVersion":{"type":"string","description":"Compatible Visual Studio version","ignoreCase":"key"},"includePreviewVersions":{"type":"boolean","description":"Include Preview Versions","ignoreCase":"key"},"installationPath":{"type":"string","description":"Path To Install .Net Core","ignoreCase":"key"},"performMultiLevelLookup":{"type":"boolean","description":"Perform Multi Level Lookup","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":".NET Core SDK/runtime installer\n\nAcquire a specific version of the .NET Core SDK from the internet or local cache and add it to the PATH","ignoreCase":"value","pattern":"^DotNetCoreInstaller@0$"},"inputs":{"description":".NET Core SDK/runtime installer inputs","properties":{"packageType":{"description":"Package to install","ignoreCase":"all","enum":["runtime","sdk"]},"version":{"type":"string","description":"Version","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure App Service manage\n\nStart, stop, restart, slot swap, slot delete, install site extensions or enable continuous monitoring for an Azure App Service","ignoreCase":"value","pattern":"^AzureAppServiceManage@0$"},"inputs":{"description":"Azure App Service manage inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"Action":{"description":"Action","ignoreCase":"all","enum":["Swap Slots","Start Azure App Service","Stop Azure App Service","Restart Azure App Service","Start Swap With Preview","Complete Swap","Cancel Swap","Delete Slot","Install Extensions","Enable Continuous Monitoring","Start all continuous webjobs","Stop all continuous webjobs"]},"WebAppName":{"type":"string","description":"App Service name","ignoreCase":"key"},"SpecifySlotOrASE":{"type":"boolean","description":"Specify Slot or App Service Environment","ignoreCase":"key","aliases":["SpecifySlot"]},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"SourceSlot":{"type":"string","description":"Source Slot","ignoreCase":"key"},"SwapWithProduction":{"type":"boolean","description":"Swap with Production","ignoreCase":"key"},"TargetSlot":{"type":"string","description":"Target Slot","ignoreCase":"key"},"PreserveVnet":{"type":"boolean","description":"Preserve Vnet","ignoreCase":"key"},"Slot":{"type":"string","description":"Slot","ignoreCase":"key"},"ExtensionsList":{"type":"string","description":"Install Extensions","ignoreCase":"key"},"OutputVariable":{"type":"string","description":"Output variable","ignoreCase":"key"},"AppInsightsResourceGroupName":{"type":"string","description":"Resource Group name for Application Insights","ignoreCase":"key"},"ApplicationInsightsResourceName":{"type":"string","description":"Application Insights resource name","ignoreCase":"key"},"ApplicationInsightsWebTestName":{"type":"string","description":"Application Insights web test name","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","WebAppName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Install Azure Func Core Tools\n\nInstall Azure Func Core Tools","ignoreCase":"value","pattern":"^FuncToolsInstaller@0$"},"inputs":{"description":"Install Azure Func Core Tools inputs","properties":{"version":{"type":"string","description":"Version","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"File transform\n\nReplace tokens with variable values in XML or JSON configuration files","ignoreCase":"value","pattern":"^FileTransform@1$"},"inputs":{"description":"File transform inputs","properties":{"folderPath":{"type":"string","description":"Package or folder","ignoreCase":"key"},"enableXmlTransform":{"type":"boolean","description":"XML transformation","ignoreCase":"key"},"xmlTransformationRules":{"type":"string","description":"Transformation rules","ignoreCase":"key"},"fileType":{"description":"File format","ignoreCase":"all","enum":["xml","json"]},"targetFiles":{"type":"string","description":"Target files","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"File transform\n\nReplace tokens with variable values in XML or JSON configuration files","ignoreCase":"value","pattern":"^FileTransform@2$"},"inputs":{"description":"File transform inputs","properties":{"folderPath":{"type":"string","description":"Package or folder","ignoreCase":"key"},"xmlTransformationRules":{"type":"string","description":"XML Transformation rules","ignoreCase":"key"},"jsonTargetFiles":{"type":"string","description":"JSON target files","ignoreCase":"key"},"xmlTargetFiles":{"type":"string","description":"XML target files","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Mac Codesign Verification\n\nVerifies that mac files have been correctly codesigned. This can only be used on Mac hosts.","ignoreCase":"value","pattern":"^MicroBuildMacSignVerify@0$"},"inputs":{"description":"MicroBuild Mac Codesign Verification inputs","properties":{"Directories":{"type":"string","description":"Directories to Verify","ignoreCase":"key"},"AppIdentity":{"type":"string","description":"Application ID","ignoreCase":"key"}},"additionalProperties":false,"required":["Directories","AppIdentity"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Extract files\n\nExtract a variety of archive and compression files such as .7z, .rar, .tar.gz, and .zip","ignoreCase":"value","pattern":"^ExtractFiles@1$"},"inputs":{"description":"Extract files inputs","properties":{"archiveFilePatterns":{"type":"string","description":"Archive file patterns","ignoreCase":"key"},"destinationFolder":{"type":"string","description":"Destination folder","ignoreCase":"key"},"cleanDestinationFolder":{"type":"boolean","description":"Clean destination folder before extracting","ignoreCase":"key"},"overwriteExistingFiles":{"type":"boolean","description":"Overwrite existing files","ignoreCase":"key"},"pathToSevenZipTool":{"type":"string","description":"Path to 7z utility","ignoreCase":"key"}},"additionalProperties":false,"required":["destinationFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Xamarin.Android\n\nBuild an Android app with Xamarin","ignoreCase":"value","pattern":"^XamarinAndroid@1$"},"inputs":{"description":"Xamarin.Android inputs","properties":{"projectFile":{"type":"string","description":"Project","ignoreCase":"key","aliases":["project"]},"target":{"type":"string","description":"Target","ignoreCase":"key"},"outputDirectory":{"type":"string","description":"Output directory","ignoreCase":"key","aliases":["outputDir"]},"configuration":{"type":"string","description":"Configuration","ignoreCase":"key"},"createAppPackage":{"type":"boolean","description":"Create app package","ignoreCase":"key"},"clean":{"type":"boolean","description":"Clean","ignoreCase":"key"},"msbuildLocationOption":{"description":"MSBuild","ignoreCase":"all","enum":["version","location"],"aliases":["msbuildLocationMethod"]},"msbuildVersionOption":{"description":"MSBuild version","ignoreCase":"all","enum":["latest","17.0","16.0","15.0","14.0","12.0","4.0"],"aliases":["msbuildVersion"]},"msbuildFile":{"type":"string","description":"MSBuild location","ignoreCase":"key","aliases":["msbuildLocation"]},"msbuildArchitectureOption":{"description":"MSBuild architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["msbuildArchitecture"]},"msbuildArguments":{"type":"string","description":"Additional arguments","ignoreCase":"key"},"jdkOption":{"description":"Select JDK to use for the build","ignoreCase":"all","enum":["JDKVersion","Path"],"aliases":["jdkSelection"]},"jdkVersionOption":{"description":"JDK version","ignoreCase":"all","enum":["default","1.11","1.10","1.9","1.8","1.7","1.6"],"aliases":["jdkVersion"]},"jdkDirectory":{"type":"string","description":"JDK path","ignoreCase":"key","aliases":["jdkUserInputPath"]},"jdkArchitectureOption":{"description":"JDK architecture","ignoreCase":"all","enum":["x86","x64"],"aliases":["jdkArchitecture"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Manifest Generator Task\n\nCreates a manifest.json and bsi.json for all the files in a folder. This generated manifest can be used to validate the contents of the folder in the future.","ignoreCase":"value","pattern":"^ManifestGeneratorTask@0$"},"inputs":{"description":"Manifest Generator Task inputs","properties":{"BuildDropPath":{"type":"string","description":"The root folder for which the manifest has to be generated.","ignoreCase":"key"},"ManifestDirPath":{"type":"string","description":"The path of the directory where the generated manifest files will be placed. If this parameter is not specified, the files will be placed in {BuildDropPath}/_manifest directory.","ignoreCase":"key"},"BuildComponentPath":{"type":"string","description":"The folder that contains the build's components/packages.","ignoreCase":"key"},"Verbosity":{"description":"The verbosity of the output generated by the manifest generator.","ignoreCase":"all","enum":["Verbose","Debug","Information","Warning","Error","Fatal"]},"PackageName":{"type":"string","description":"The name of the package this SBOM describes.","ignoreCase":"key"},"PackageVersion":{"type":"string","description":"The version of the package this SBOM describes.","ignoreCase":"key"},"DockerImagesToScan":{"type":"string","description":"Comma separated list of docker image names or hashes to be scanned for packages, ex: ubuntu:16.04, 56bab49eef2ef07505f6a1b0d5bd3a601dfc3c76ad4460f24c91d6fa298369ab.","ignoreCase":"key"},"ConfigFilePath":{"type":"string","description":"The json file that contains the configuration for the Manifest Tool.","ignoreCase":"key"}},"additionalProperties":false,"required":["BuildDropPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Powershell++ (deprecated)\n\n(Deprecated) Use the PowerShell task version 2 for online scripts","ignoreCase":"value","pattern":"^Powershellpp@0$"},"inputs":{"description":"Powershell++ (deprecated) inputs","properties":{"type":{"description":"Type","ignoreCase":"all","enum":["InlineScript","FilePath"]},"scriptName":{"type":"string","description":"Script filename","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingFolder":{"type":"string","description":"Working folder","ignoreCase":"key"},"script":{"type":"string","description":"Script","ignoreCase":"key"}},"additionalProperties":false,"required":["type"]}},"deprecationMessage":"Powershellpp is deprecated - (Deprecated) Use the PowerShell task version 2 for online scripts","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Copy and Publish Build Artifacts\n\n[DEPRECATED] Use the Copy Files task and the Publish Build Artifacts task instead","ignoreCase":"value","pattern":"^CopyPublishBuildArtifacts@1$"},"inputs":{"description":"Copy and Publish Build Artifacts inputs","properties":{"CopyRoot":{"type":"string","description":"Copy Root","ignoreCase":"key"},"Contents":{"type":"string","description":"Contents","ignoreCase":"key"},"ArtifactName":{"type":"string","description":"Artifact Name","ignoreCase":"key"},"ArtifactType":{"description":"Artifact Type","ignoreCase":"all","enum":["Container","FilePath"]},"TargetPath":{"type":"string","description":"Path","ignoreCase":"key"}},"additionalProperties":false,"required":["Contents","ArtifactName","ArtifactType"]}},"deprecationMessage":"CopyPublishBuildArtifacts is deprecated - [DEPRECATED] Use the Copy Files task and the Publish Build Artifacts task instead","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Bash or CMD\n\nExecute Bash on POSIX, CMD on Windows","ignoreCase":"value","pattern":"^BashOrCmd@0$"},"inputs":{"description":"Bash or CMD inputs","properties":{"bash":{"type":"string","description":"Bash script","ignoreCase":"key"},"cmd":{"type":"string","description":"CMD script","ignoreCase":"key"}},"additionalProperties":false,"required":["bash","cmd"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Download package\n\nDownload a package from a package management feed in Azure Artifacts","ignoreCase":"value","pattern":"^DownloadPackage@1$"},"inputs":{"description":"Download package inputs","properties":{"packageType":{"description":"Package Type","ignoreCase":"all","enum":["maven","npm","nuget","pypi","upack"]},"feed":{"type":"string","description":"Feed","ignoreCase":"key"},"view":{"type":"string","description":"View","ignoreCase":"key"},"definition":{"type":"string","description":"Package","ignoreCase":"key"},"version":{"type":"string","description":"Version","ignoreCase":"key"},"files":{"type":"string","description":"Files","ignoreCase":"key"},"extract":{"type":"boolean","description":"Extract package contents","ignoreCase":"key"},"downloadPath":{"type":"string","description":"Destination directory","ignoreCase":"key"}},"additionalProperties":false,"required":["feed","definition","version"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Download package\n\nDownload a package from a package management feed in Azure Artifacts","ignoreCase":"value","pattern":"^DownloadPackage@0$"},"inputs":{"description":"Download package inputs","properties":{"feed":{"type":"string","description":"Feed","ignoreCase":"key"},"definition":{"type":"string","description":"Package","ignoreCase":"key"},"version":{"type":"string","description":"Version","ignoreCase":"key"},"downloadPath":{"type":"string","description":"Destination directory","ignoreCase":"key"}},"additionalProperties":false,"required":["feed","definition","version"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Static Drop\n\nThis task is deprecated.","ignoreCase":"value","pattern":"^MicroBuildStaticDrop@1$"},"inputs":{"description":"MicroBuild Static Drop inputs","properties":{"CopyRoot":{"type":"string","description":"Copy Root","ignoreCase":"key"},"Contents":{"type":"string","description":"Contents","ignoreCase":"key"},"ArtifactName":{"type":"string","description":"Artifact Name","ignoreCase":"key"},"TargetPath":{"type":"string","description":"Path","ignoreCase":"key"}},"additionalProperties":false,"required":["Contents"]}},"deprecationMessage":"MicroBuildStaticDrop is deprecated - This task is deprecated.","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure resource group deployment\n\nDeploy an Azure Resource Manager (ARM) template to a resource group and manage virtual machines","ignoreCase":"value","pattern":"^AzureResourceGroupDeployment@2$"},"inputs":{"description":"Azure resource group deployment inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"action":{"description":"Action","ignoreCase":"all","enum":["Create Or Update Resource Group","Select Resource Group","Start","Stop","StopWithDeallocate","Restart","Delete","DeleteRG"]},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"location":{"type":"string","description":"Location","ignoreCase":"key"},"templateLocation":{"description":"Template location","ignoreCase":"all","enum":["Linked artifact","URL of the file"]},"csmFileLink":{"type":"string","description":"Template link","ignoreCase":"key"},"csmParametersFileLink":{"type":"string","description":"Template parameters link","ignoreCase":"key"},"csmFile":{"type":"string","description":"Template","ignoreCase":"key"},"csmParametersFile":{"type":"string","description":"Template parameters","ignoreCase":"key"},"overrideParameters":{"type":"string","description":"Override template parameters","ignoreCase":"key"},"deploymentMode":{"description":"Deployment mode","ignoreCase":"all","enum":["Incremental","Complete","Validation"]},"enableDeploymentPrerequisites":{"description":"Enable prerequisites","ignoreCase":"all","enum":["None","ConfigureVMwithWinRM","ConfigureVMWithDGAgent"]},"teamServicesConnection":{"type":"string","description":"Azure Pipelines service connection","ignoreCase":"key","aliases":["deploymentGroupEndpoint"]},"teamProject":{"type":"string","description":"Team project","ignoreCase":"key","aliases":["project"]},"deploymentGroupName":{"type":"string","description":"Deployment Group","ignoreCase":"key"},"copyAzureVMTags":{"type":"boolean","description":"Copy Azure VM tags to agents","ignoreCase":"key"},"runAgentServiceAsUser":{"type":"boolean","description":"Run agent service as a user","ignoreCase":"key"},"userName":{"type":"string","description":"User name","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"outputVariable":{"type":"string","description":"VM details for WinRM","ignoreCase":"key"},"deploymentName":{"type":"string","description":"Deployment name","ignoreCase":"key"},"deploymentOutputs":{"type":"string","description":"Deployment outputs","ignoreCase":"key"},"addSpnToEnvironment":{"type":"boolean","description":"Access service principal details in override parameters","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","resourceGroupName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Resource Group Deployment\n\nDeploy, start, stop, delete Azure Resource Groups","ignoreCase":"value","pattern":"^AzureResourceGroupDeployment@1$"},"inputs":{"description":"Azure Resource Group Deployment inputs","properties":{"ConnectedServiceNameSelector":{"description":"Azure Connection Type","ignoreCase":"all","enum":["ConnectedServiceName","ConnectedServiceNameClassic"]},"ConnectedServiceName":{"type":"string","description":"Azure Subscription","ignoreCase":"key"},"ConnectedServiceNameClassic":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key"},"action":{"description":"Action","ignoreCase":"all","enum":["Create Or Update Resource Group","Select Resource Group","Start","Stop","Restart","Delete","DeleteRG"]},"actionClassic":{"description":"Action","ignoreCase":"all","enum":["Select Resource Group"]},"resourceGroupName":{"type":"string","description":"Resource Group","ignoreCase":"key"},"cloudService":{"type":"string","description":"Cloud Service","ignoreCase":"key"},"location":{"description":"Location","ignoreCase":"all","enum":["Australia East","Australia Southeast","Brazil South","Canada Central","Canada East","Central India","Central US","East Asia","East US","East US 2 ","Japan East","Japan West","North Central US","North Europe","South Central US","South India","Southeast Asia","UK South","UK West","West Central US","West Europe","West India","West US","West US 2"]},"csmFile":{"type":"string","description":"Template","ignoreCase":"key"},"csmParametersFile":{"type":"string","description":"Template Parameters","ignoreCase":"key"},"overrideParameters":{"type":"string","description":"Override Template Parameters","ignoreCase":"key"},"deploymentMode":{"description":"Deployment Mode","ignoreCase":"all","enum":["Validation","Incremental","Complete"]},"enableDeploymentPrerequisitesForCreate":{"type":"boolean","description":"Enable Deployment Prerequisites","ignoreCase":"key"},"enableDeploymentPrerequisitesForSelect":{"type":"boolean","description":"Enable Deployment Prerequisites","ignoreCase":"key"},"outputVariable":{"type":"string","description":"Resource Group","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"deprecationMessage":"AzureResourceGroupDeployment is deprecated - Deploy, start, stop, delete Azure Resource Groups","doNotSuggest":true,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"ARM template deployment\n\nDeploy an Azure Resource Manager (ARM) template to all the deployment scopes","ignoreCase":"value","pattern":"^AzureResourceManagerTemplateDeployment@3$"},"inputs":{"description":"ARM template deployment inputs","properties":{"deploymentScope":{"description":"Deployment scope","ignoreCase":"all","enum":["Management Group","Subscription","Resource Group"]},"azureResourceManagerConnection":{"type":"string","description":"Azure Resource Manager connection","ignoreCase":"key","aliases":["ConnectedServiceName"]},"subscriptionId":{"type":"string","description":"Subscription","ignoreCase":"key","aliases":["subscriptionName"]},"action":{"description":"Action","ignoreCase":"all","enum":["Create Or Update Resource Group","DeleteRG"]},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"location":{"type":"string","description":"Location","ignoreCase":"key"},"templateLocation":{"description":"Template location","ignoreCase":"all","enum":["Linked artifact","URL of the file"]},"csmFileLink":{"type":"string","description":"Template link","ignoreCase":"key"},"csmParametersFileLink":{"type":"string","description":"Template parameters link","ignoreCase":"key"},"csmFile":{"type":"string","description":"Template","ignoreCase":"key"},"csmParametersFile":{"type":"string","description":"Template parameters","ignoreCase":"key"},"overrideParameters":{"type":"string","description":"Override template parameters","ignoreCase":"key"},"deploymentMode":{"description":"Deployment mode","ignoreCase":"all","enum":["Incremental","Complete","Validation"]},"deploymentName":{"type":"string","description":"Deployment name","ignoreCase":"key"},"deploymentOutputs":{"type":"string","description":"Deployment outputs","ignoreCase":"key"},"addSpnToEnvironment":{"type":"boolean","description":"Access service principal details in override parameters","ignoreCase":"key"}},"additionalProperties":false,"required":["azureResourceManagerConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Invoke REST API\n\nInvoke REST API as a part of your process.","ignoreCase":"value","pattern":"^InvokeRESTAPI@0$"},"inputs":{"description":"Invoke REST API inputs","properties":{"serviceConnection":{"type":"string","description":"Generic endpoint","ignoreCase":"key","aliases":["connectedServiceName"]},"method":{"description":"Method","ignoreCase":"all","enum":["OPTIONS","GET","HEAD","POST","PUT","DELETE","TRACE","PATCH"]},"headers":{"type":"string","description":"Headers","ignoreCase":"key"},"body":{"type":"string","description":"Body","ignoreCase":"key"},"urlSuffix":{"type":"string","description":"Url suffix string","ignoreCase":"key"},"waitForCompletion":{"description":"Complete based on","ignoreCase":"all","enum":["true","false"]},"successCriteria":{"type":"string","description":"Success criteria","ignoreCase":"key"}},"additionalProperties":false,"required":["serviceConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Invoke REST API\n\nInvoke a REST API as a part of your pipeline.","ignoreCase":"value","pattern":"^InvokeRESTAPI@1$"},"inputs":{"description":"Invoke REST API inputs","properties":{"connectionType":{"description":"Connection type","ignoreCase":"all","enum":["connectedServiceName","connectedServiceNameARM"],"aliases":["connectedServiceNameSelector"]},"serviceConnection":{"type":"string","description":"Generic service connection","ignoreCase":"key","aliases":["connectedServiceName","genericService"]},"azureServiceConnection":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["connectedServiceNameARM","azureSubscription"]},"method":{"description":"Method","ignoreCase":"all","enum":["OPTIONS","GET","HEAD","POST","PUT","DELETE","TRACE","PATCH"]},"headers":{"type":"string","description":"Headers","ignoreCase":"key"},"body":{"type":"string","description":"Body","ignoreCase":"key"},"urlSuffix":{"type":"string","description":"URL suffix and parameters","ignoreCase":"key"},"waitForCompletion":{"description":"Completion event","ignoreCase":"all","enum":["true","false"]},"successCriteria":{"type":"string","description":"Success criteria","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Archive Files\n\nArchive files using compression formats such as .7z, .rar, .tar.gz, and .zip.","ignoreCase":"value","pattern":"^ArchiveFiles@1$"},"inputs":{"description":"Archive Files inputs","properties":{"rootFolder":{"type":"string","description":"Root folder (or file) to archive","ignoreCase":"key"},"includeRootFolder":{"type":"boolean","description":"Prefix root folder name to archive paths","ignoreCase":"key"},"archiveType":{"description":"Archive type","ignoreCase":"all","enum":["default","7z","tar","wim"]},"tarCompression":{"description":"Tar compression","ignoreCase":"all","enum":["gz","bz2","xz","none"]},"archiveFile":{"type":"string","description":"Archive file to create","ignoreCase":"key"},"replaceExistingArchive":{"type":"boolean","description":"Replace existing archive","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Archive files\n\nCompress files into .7z, .tar.gz, or .zip","ignoreCase":"value","pattern":"^ArchiveFiles@2$"},"inputs":{"description":"Archive files inputs","properties":{"rootFolderOrFile":{"type":"string","description":"Root folder or file to archive","ignoreCase":"key"},"includeRootFolder":{"type":"boolean","description":"Prepend root folder name to archive paths","ignoreCase":"key"},"archiveType":{"description":"Archive type","ignoreCase":"all","enum":["zip","7z","tar","wim"]},"sevenZipCompression":{"description":"7z compression","ignoreCase":"all","enum":["ultra","maximum","normal","fast","fastest","none"]},"tarCompression":{"description":"Tar compression","ignoreCase":"all","enum":["gz","bz2","xz","none"]},"archiveFile":{"type":"string","description":"Archive file to create","ignoreCase":"key"},"replaceExistingArchive":{"type":"boolean","description":"Replace existing archive","ignoreCase":"key"},"verbose":{"type":"boolean","description":"Force verbose output","ignoreCase":"key"},"quiet":{"type":"boolean","description":"Force quiet output","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"GitHub Comment\n\nWrite a comment to your Github entity i.e. issue or a Pull Request (PR)","ignoreCase":"value","pattern":"^GitHubComment@0$"},"inputs":{"description":"GitHub Comment inputs","properties":{"gitHubConnection":{"type":"string","description":"GitHub connection (OAuth or PAT)","ignoreCase":"key"},"repositoryName":{"type":"string","description":"Repository","ignoreCase":"key"},"id":{"type":"string","description":"ID of the github pr/issue","ignoreCase":"key"},"comment":{"type":"string","description":"Comment","ignoreCase":"key"}},"additionalProperties":false,"required":["gitHubConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Copy files\n\nCopy files from a source folder to a target folder using patterns matching file paths (not folder paths)","ignoreCase":"value","pattern":"^CopyFiles@2$"},"inputs":{"description":"Copy files inputs","properties":{"SourceFolder":{"type":"string","description":"Source Folder","ignoreCase":"key"},"Contents":{"type":"string","description":"Contents","ignoreCase":"key"},"TargetFolder":{"type":"string","description":"Target Folder","ignoreCase":"key"},"CleanTargetFolder":{"type":"boolean","description":"Clean Target Folder","ignoreCase":"key"},"OverWrite":{"type":"boolean","description":"Overwrite","ignoreCase":"key"},"flattenFolders":{"type":"boolean","description":"Flatten Folders","ignoreCase":"key"},"preserveTimestamp":{"type":"boolean","description":"Preserve Target Timestamp","ignoreCase":"key"},"retryCount":{"type":"string","description":"Retry count to copy the file","ignoreCase":"key"},"delayBetweenRetries":{"type":"string","description":"Delay between two retries.","ignoreCase":"key"},"ignoreMakeDirErrors":{"type":"boolean","description":"Ignore errors during creation of target folder.","ignoreCase":"key"}},"additionalProperties":false,"required":["TargetFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Copy Files\n\nCopy files from source folder to target folder using minimatch patterns (The minimatch patterns will only match file paths, not folder paths)","ignoreCase":"value","pattern":"^CopyFiles@1$"},"inputs":{"description":"Copy Files inputs","properties":{"SourceFolder":{"type":"string","description":"Source Folder","ignoreCase":"key"},"Contents":{"type":"string","description":"Contents","ignoreCase":"key"},"TargetFolder":{"type":"string","description":"Target Folder","ignoreCase":"key"},"CleanTargetFolder":{"type":"boolean","description":"Clean Target Folder","ignoreCase":"key"},"OverWrite":{"type":"boolean","description":"Overwrite","ignoreCase":"key"},"flattenFolders":{"type":"boolean","description":"Flatten Folders","ignoreCase":"key"}},"additionalProperties":false,"required":["TargetFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Database for MySQL deployment\n\nRun your scripts and make changes to your Azure Database for MySQL","ignoreCase":"value","pattern":"^AzureMysqlDeployment@1$"},"inputs":{"description":"Azure Database for MySQL deployment inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"ServerName":{"type":"string","description":"Host Name","ignoreCase":"key"},"DatabaseName":{"type":"string","description":"Database Name","ignoreCase":"key"},"SqlUsername":{"type":"string","description":"Server Admin Login","ignoreCase":"key"},"SqlPassword":{"type":"string","description":"Password","ignoreCase":"key"},"TaskNameSelector":{"description":"Type","ignoreCase":"all","enum":["SqlTaskFile","InlineSqlTask"]},"SqlFile":{"type":"string","description":"MySQL Script","ignoreCase":"key"},"SqlInline":{"type":"string","description":"Inline MySQL Script","ignoreCase":"key"},"SqlAdditionalArguments":{"type":"string","description":"Additional MySQL Arguments","ignoreCase":"key"},"IpDetectionMethod":{"description":"Specify Firewall Rules Using","ignoreCase":"all","enum":["AutoDetect","IPAddressRange"]},"StartIpAddress":{"type":"string","description":"Start IP Address","ignoreCase":"key"},"EndIpAddress":{"type":"string","description":"End IP Address","ignoreCase":"key"},"DeleteFirewallRule":{"type":"boolean","description":"Delete Rule After Task Ends","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","ServerName","SqlUsername","SqlPassword"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"npm\n\nInstall and publish npm packages, or run an npm command. Supports npmjs.com and authenticated registries like Azure Artifacts.","ignoreCase":"value","pattern":"^Npm@1$"},"inputs":{"description":"npm inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["ci","install","publish","custom"]},"workingDir":{"type":"string","description":"Working folder that contains package.json","ignoreCase":"key"},"verbose":{"type":"boolean","description":"Verbose logging","ignoreCase":"key"},"customCommand":{"type":"string","description":"Command and arguments","ignoreCase":"key"},"customRegistry":{"description":"Registries to use","ignoreCase":"all","enum":["useNpmrc","useFeed"]},"customFeed":{"type":"string","description":"Use packages from this Azure Artifacts/TFS registry","ignoreCase":"key"},"customEndpoint":{"type":"string","description":"Credentials for registries outside this organization/collection","ignoreCase":"key"},"publishRegistry":{"description":"Registry location","ignoreCase":"all","enum":["useExternalRegistry","useFeed"]},"publishFeed":{"type":"string","description":"Target registry","ignoreCase":"key"},"publishPackageMetadata":{"type":"boolean","description":"Publish pipeline metadata","ignoreCase":"key"},"publishEndpoint":{"type":"string","description":"External Registry","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"npm\n\nRun an npm command. Use NpmAuthenticate@0 task for latest capabilities.","ignoreCase":"value","pattern":"^Npm@0$"},"inputs":{"description":"npm inputs","properties":{"cwd":{"type":"string","description":"working folder","ignoreCase":"key"},"command":{"type":"string","description":"npm command","ignoreCase":"key"},"arguments":{"type":"string","description":"arguments","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Drop Validator Task\n\nValidates a given drop against a manifest generated at build time to verify the integrity of the drop.","ignoreCase":"value","pattern":"^DropValidatorTask@0$"},"inputs":{"description":"Drop Validator Task inputs","properties":{"BuildDropPath":{"type":"string","description":"The root folder of the drop.","ignoreCase":"key"},"ManifestDirPath":{"type":"string","description":"The path of the directory where the manifest will be validated. If this parameter is not specified, the manifest will be validated in {BuildDropPath}/_manifest directory.","ignoreCase":"key"},"OutputPath":{"type":"string","description":"The path where the generated output file is placed.","ignoreCase":"key"},"ValidateSignature":{"type":"boolean","description":"If checked we will verify the signature of the manifest using the provided catalog file.","ignoreCase":"key"},"Verbosity":{"description":"The verbosity of the output generated by the drop validator.","ignoreCase":"all","enum":["Verbose","Debug","Information","Warning","Error","Fatal"]},"ConfigFilePath":{"type":"string","description":"The json file that contains the configuration for the Manifest Tool.","ignoreCase":"key"},"RootPathFilter":{"type":"string","description":"If you're downloading only a part of the drop using the '-r' or 'root' parameter in the drop client, specify the same string value here in order to skip validating paths that are not downloaded.","ignoreCase":"key"}},"additionalProperties":false,"required":["BuildDropPath","OutputPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Deploy Azure Static Web App\n\n[PREVIEW] Build and deploy an Azure Static Web App","ignoreCase":"value","pattern":"^AzureStaticWebApp@0$"},"inputs":{"description":"Deploy Azure Static Web App inputs","properties":{"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd","rootDirectory"]},"app_location":{"type":"string","description":"App location","ignoreCase":"key"},"app_build_command":{"type":"string","description":"App build command","ignoreCase":"key"},"output_location":{"type":"string","description":"Output location","ignoreCase":"key"},"api_location":{"type":"string","description":"Api location","ignoreCase":"key"},"api_build_command":{"type":"string","description":"Api build command","ignoreCase":"key"},"routes_location":{"type":"string","description":"Routes location","ignoreCase":"key"},"config_file_location":{"type":"string","description":"Config file location","ignoreCase":"key"},"skip_app_build":{"type":"boolean","description":"Skip app build","ignoreCase":"key"},"verbose":{"type":"boolean","description":"Verbose","ignoreCase":"key"},"build_timeout_in_minutes":{"type":"integer","description":"Build timeout in minutes","ignoreCase":"key"},"azure_static_web_apps_api_token":{"type":"string","description":"Azure Static Web Apps api token","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Use Node.js ecosystem\n\nSet up a Node.js environment and add it to the PATH, additionally providing proxy support","ignoreCase":"value","pattern":"^UseNode@1$"},"inputs":{"description":"Use Node.js ecosystem inputs","properties":{"version":{"type":"string","description":"Version","ignoreCase":"key"},"checkLatest":{"type":"boolean","description":"Check for Latest Version","ignoreCase":"key"},"force32bit":{"type":"boolean","description":"Use 32 bit version on x64 agents","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Node.js tool installer\n\nFinds or downloads and caches the specified version spec of Node.js and adds it to the PATH","ignoreCase":"value","pattern":"^NodeTool@0$"},"inputs":{"description":"Node.js tool installer inputs","properties":{"versionSpec":{"type":"string","description":"Version Spec","ignoreCase":"key"},"checkLatest":{"type":"boolean","description":"Check for Latest Version","ignoreCase":"key"},"force32bit":{"type":"boolean","description":"Use 32 bit version on x64 agents","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"UnZip A package\n\nUnZip a package","ignoreCase":"value","pattern":"^unzip@0$"},"inputs":{"description":"UnZip A package inputs","properties":{"pathToZipFile":{"type":"string","description":"Path to the zip file","ignoreCase":"key"},"pathToZipFolder":{"type":"string","description":"Path to folder","ignoreCase":"key"}},"additionalProperties":false,"required":["pathToZipFile","pathToZipFolder"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"[Deprecated] SQL Server database deploy\n\nDeploy a SQL Server database using DACPAC","ignoreCase":"value","pattern":"^SqlServerDacpacDeployment@1$"},"inputs":{"description":"[Deprecated] SQL Server database deploy inputs","properties":{"EnvironmentName":{"type":"string","description":"Machines","ignoreCase":"key"},"AdminUserName":{"type":"string","description":"Admin Login","ignoreCase":"key"},"AdminPassword":{"type":"string","description":"Password","ignoreCase":"key"},"Protocol":{"description":"Protocol","ignoreCase":"all","enum":["Http","Https"]},"TestCertificate":{"type":"boolean","description":"Test Certificate","ignoreCase":"key"},"DacpacFile":{"type":"string","description":"DACPAC File","ignoreCase":"key"},"TargetMethod":{"description":"Specify SQL Using","ignoreCase":"all","enum":["server","connectionString","publishProfile"]},"ServerName":{"type":"string","description":"Server Name","ignoreCase":"key"},"DatabaseName":{"type":"string","description":"Database Name","ignoreCase":"key"},"SqlUsername":{"type":"string","description":"SQL Username","ignoreCase":"key"},"SqlPassword":{"type":"string","description":"SQL Password","ignoreCase":"key"},"ConnectionString":{"type":"string","description":"Connection String","ignoreCase":"key"},"PublishProfile":{"type":"string","description":"Publish Profile","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"},"DeployInParallel":{"type":"boolean","description":"Deploy in Parallel","ignoreCase":"key"},"ResourceFilteringMethod":{"description":"Select Machines By","ignoreCase":"all","enum":["machineNames","tags"]},"MachineFilter":{"type":"string","description":"Deploy to Machines","ignoreCase":"key"}},"additionalProperties":false,"required":["EnvironmentName","DacpacFile"]}},"deprecationMessage":"SqlServerDacpacDeployment is deprecated - Deploy a SQL Server database using DACPAC","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Visual Studio test platform installer\n\nAcquire the test platform from nuget.org or the tool cache. Satisfies the ‘vstest’ demand and can be used for running tests and collecting diagnostic data using the Visual Studio Test task.","ignoreCase":"value","pattern":"^VisualStudioTestPlatformInstaller@1$"},"inputs":{"description":"Visual Studio test platform installer inputs","properties":{"packageFeedSelector":{"description":"Package Feed","ignoreCase":"all","enum":["nugetOrg","customFeed","netShare"]},"versionSelector":{"description":"Version","ignoreCase":"all","enum":["latestPreRelease","latestStable","specificVersion"]},"testPlatformVersion":{"type":"string","description":"Test Platform Version","ignoreCase":"key"},"customFeed":{"type":"string","description":"Package Source","ignoreCase":"key"},"username":{"type":"string","description":"User Name","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"netShare":{"type":"string","description":"UNC Path","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Publish To Azure Service Bus\n\nSends a message to Azure Service Bus using a service connection (no agent is required)","ignoreCase":"value","pattern":"^PublishToAzureServiceBus@1$"},"inputs":{"description":"Publish To Azure Service Bus inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Service Bus service connection","ignoreCase":"key","aliases":["connectedServiceName"]},"messageBody":{"type":"string","description":"Message body","ignoreCase":"key"},"sessionId":{"type":"string","description":"Session Id","ignoreCase":"key"},"signPayload":{"type":"boolean","description":"Sign the Message","ignoreCase":"key"},"certificateString":{"type":"string","description":"Certificate Variable","ignoreCase":"key"},"signatureKey":{"type":"string","description":"Signature Property Key","ignoreCase":"key"},"waitForCompletion":{"type":"boolean","description":"Wait for task completion","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Publish To Azure Service Bus\n\nSends a message to azure service bus using a service connection (no agent required).","ignoreCase":"value","pattern":"^PublishToAzureServiceBus@0$"},"inputs":{"description":"Publish To Azure Service Bus inputs","properties":{"azureSubscription":{"type":"string","description":"Azure service bus connection","ignoreCase":"key","aliases":["connectedServiceName"]},"messageBody":{"type":"string","description":"Message body","ignoreCase":"key"},"waitForCompletion":{"type":"boolean","description":"Wait for task completion","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Deploy to Kubernetes\n\nUse Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts","ignoreCase":"value","pattern":"^KubernetesManifest@0$"},"inputs":{"description":"Deploy to Kubernetes inputs","properties":{"action":{"description":"Action","ignoreCase":"all","enum":["bake","createSecret","delete","deploy","patch","promote","scale","reject"]},"kubernetesServiceConnection":{"type":"string","description":"Kubernetes service connection","ignoreCase":"key"},"namespace":{"type":"string","description":"Namespace","ignoreCase":"key"},"strategy":{"description":"Strategy","ignoreCase":"all","enum":["canary","none"]},"trafficSplitMethod":{"description":"Traffic split method","ignoreCase":"all","enum":["pod","smi"]},"percentage":{"type":"string","description":"Percentage","ignoreCase":"key"},"baselineAndCanaryReplicas":{"type":"string","description":"Baseline and canary replicas","ignoreCase":"key"},"manifests":{"type":"string","description":"Manifests","ignoreCase":"key"},"containers":{"type":"string","description":"Containers","ignoreCase":"key"},"imagePullSecrets":{"type":"string","description":"ImagePullSecrets","ignoreCase":"key"},"renderType":{"description":"Render Engine","ignoreCase":"all","enum":["helm","kompose","kustomize"]},"dockerComposeFile":{"type":"string","description":"Path to docker compose file","ignoreCase":"key"},"helmChart":{"type":"string","description":"Helm Chart","ignoreCase":"key"},"releaseName":{"type":"string","description":"Helm Release Name","ignoreCase":"key"},"overrideFiles":{"type":"string","description":"Override Files","ignoreCase":"key"},"overrides":{"type":"string","description":"Overrides","ignoreCase":"key"},"kustomizationPath":{"type":"string","description":"Kustomization Path","ignoreCase":"key"},"resourceToPatch":{"description":"Resource to patch","ignoreCase":"all","enum":["file","name"]},"resourceFileToPatch":{"type":"string","description":"File path","ignoreCase":"key"},"kind":{"description":"Kind","ignoreCase":"all","enum":["deployment","replicaset","statefulset"]},"name":{"type":"string","description":"Name","ignoreCase":"key"},"replicas":{"type":"string","description":"Replica count","ignoreCase":"key"},"mergeStrategy":{"description":"Merge Strategy","ignoreCase":"all","enum":["json","merge","strategic"]},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"patch":{"type":"string","description":"Patch","ignoreCase":"key"},"secretType":{"description":"Type of secret","ignoreCase":"all","enum":["dockerRegistry","generic"]},"secretName":{"type":"string","description":"Secret name","ignoreCase":"key"},"secretArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"dockerRegistryEndpoint":{"type":"string","description":"Docker registry service connection","ignoreCase":"key"},"rolloutStatusTimeout":{"type":"string","description":"Timeout for rollout status","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download build artifacts\n\nDownload files that were saved as artifacts of a completed build","ignoreCase":"value","pattern":"^DownloadBuildArtifacts@1$"},"inputs":{"description":"Download build artifacts inputs","properties":{"buildType":{"description":"Download artifacts produced by","ignoreCase":"all","enum":["current","specific"]},"project":{"type":"string","description":"Project","ignoreCase":"key"},"pipeline":{"type":"string","description":"Build pipeline","ignoreCase":"key","aliases":["definition"]},"specificBuildWithTriggering":{"type":"boolean","description":"When appropriate, download artifacts from the triggering build.","ignoreCase":"key"},"buildVersionToDownload":{"description":"Build version to download","ignoreCase":"all","enum":["latest","latestFromBranch","specific"]},"allowPartiallySucceededBuilds":{"type":"boolean","description":"Download artifacts even from partially succeeded builds.","ignoreCase":"key"},"branchName":{"type":"string","description":"Branch name","ignoreCase":"key"},"buildId":{"type":"string","description":"Build","ignoreCase":"key"},"tags":{"type":"string","description":"Build Tags","ignoreCase":"key"},"downloadType":{"description":"Download type","ignoreCase":"all","enum":["single","specific"]},"artifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"},"itemPattern":{"type":"string","description":"Matching pattern","ignoreCase":"key"},"downloadPath":{"type":"string","description":"Destination directory","ignoreCase":"key"},"parallelizationLimit":{"type":"string","description":"Parallelization limit","ignoreCase":"key"},"checkDownloadedFiles":{"type":"boolean","description":"Check downloaded files","ignoreCase":"key"},"retryDownloadCount":{"type":"string","description":"Retry count","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Download build artifacts\n\nDownload files that were saved as artifacts of a completed build","ignoreCase":"value","pattern":"^DownloadBuildArtifacts@0$"},"inputs":{"description":"Download build artifacts inputs","properties":{"buildType":{"description":"Download artifacts produced by","ignoreCase":"all","enum":["current","specific"]},"project":{"type":"string","description":"Project","ignoreCase":"key"},"pipeline":{"type":"string","description":"Build pipeline","ignoreCase":"key","aliases":["definition"]},"specificBuildWithTriggering":{"type":"boolean","description":"When appropriate, download artifacts from the triggering build.","ignoreCase":"key"},"buildVersionToDownload":{"description":"Build version to download","ignoreCase":"all","enum":["latest","latestFromBranch","specific"]},"allowPartiallySucceededBuilds":{"type":"boolean","description":"Download artifacts even from partially succeeded builds.","ignoreCase":"key"},"branchName":{"type":"string","description":"Branch name","ignoreCase":"key"},"buildId":{"type":"string","description":"Build","ignoreCase":"key"},"tags":{"type":"string","description":"Build Tags","ignoreCase":"key"},"downloadType":{"description":"Download type","ignoreCase":"all","enum":["single","specific"]},"artifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"},"itemPattern":{"type":"string","description":"Matching pattern","ignoreCase":"key"},"downloadPath":{"type":"string","description":"Destination directory","ignoreCase":"key"},"cleanDestinationFolder":{"type":"boolean","description":"Clean destination folder","ignoreCase":"key"},"parallelizationLimit":{"type":"string","description":"Parallelization limit","ignoreCase":"key"},"checkDownloadedFiles":{"type":"boolean","description":"Check downloaded files","ignoreCase":"key"},"retryDownloadCount":{"type":"string","description":"Retry count","ignoreCase":"key"},"extractTars":{"type":"boolean","description":"Extract all files that are stored inside tar archives","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"CocoaPods\n\nInstall CocoaPods dependencies for Swift and Objective-C Cocoa projects","ignoreCase":"value","pattern":"^CocoaPods@0$"},"inputs":{"description":"CocoaPods inputs","properties":{"workingDirectory":{"type":"string","description":"Working directory","ignoreCase":"key","aliases":["cwd"]},"forceRepoUpdate":{"type":"boolean","description":"Force repo update","ignoreCase":"key"},"projectDirectory":{"type":"string","description":"Project directory","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Archive Symbols\n\nArchives symbols on Symweb.","ignoreCase":"value","pattern":"^MicroBuildArchiveSymbols@1$"},"inputs":{"description":"MicroBuild Archive Symbols inputs","properties":{"SymbolsFeatureName":{"type":"string","description":"Feature Name","ignoreCase":"key"},"SymbolsSymwebProject":{"description":"Symweb Project","ignoreCase":"all","enum":["VS","CLR","DDE"]},"SymbolsUncPath":{"type":"string","description":"UNC Path to Symbols","ignoreCase":"key"},"SymbolsEmailContacts":{"type":"string","description":"Team Contacts","ignoreCase":"key"},"SubmitToInternet":{"type":"boolean","description":"Submit to Internet","ignoreCase":"key"},"CreateBuildArtifact":{"type":"boolean","description":"Create Build Artifact","ignoreCase":"key"},"SymbolsAgentPath":{"type":"string","description":"Agent Path to Symbols","ignoreCase":"key"},"ExcludeAgentFolders":{"type":"string","description":"Exclude Agent Folders","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Spring Cloud\n\nDeploy applications to Azure Spring Cloud and manage deployments.","ignoreCase":"value","pattern":"^AzureSpringCloud@0$"},"inputs":{"description":"Azure Spring Cloud inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"Action":{"description":"Action","ignoreCase":"all","enum":["Deploy","Set Production","Delete Staging Deployment"]},"AzureSpringCloud":{"type":"string","description":"Azure Spring Cloud Name","ignoreCase":"key"},"AppName":{"type":"string","description":"App","ignoreCase":"key"},"UseStagingDeployment":{"type":"boolean","description":"Use Staging Deployment","ignoreCase":"key"},"CreateNewDeployment":{"type":"boolean","description":"Create a new staging deployment if one does not exist.","ignoreCase":"key"},"DeploymentName":{"type":"string","description":"Deployment","ignoreCase":"key"},"Package":{"type":"string","description":"Package or folder","ignoreCase":"key"},"EnvironmentVariables":{"type":"string","description":"Environment Variables","ignoreCase":"key"},"JvmOptions":{"type":"string","description":"JVM Options","ignoreCase":"key"},"RuntimeVersion":{"description":"Runtime Version","ignoreCase":"all","enum":["Java_8","Java_11","NetCore_31"]},"DotNetCoreMainEntryPath":{"type":"string","description":"Main Entry Path","ignoreCase":"key"},"Version":{"type":"string","description":"Version","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","AzureSpringCloud","AppName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Web App\n\nDeploy an Azure Web App for Linux or Windows","ignoreCase":"value","pattern":"^AzureWebApp@1$"},"inputs":{"description":"Azure Web App inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key"},"appType":{"description":"App type","ignoreCase":"all","enum":["webApp","webAppLinux"]},"appName":{"type":"string","description":"App name","ignoreCase":"key"},"deployToSlotOrASE":{"type":"boolean","description":"Deploy to Slot or App Service Environment","ignoreCase":"key"},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"slotName":{"type":"string","description":"Slot","ignoreCase":"key"},"package":{"type":"string","description":"Package or folder","ignoreCase":"key"},"customDeployFolder":{"type":"string","description":"Custom Deploy Folder","ignoreCase":"key"},"runtimeStack":{"type":"string","description":"Runtime stack","ignoreCase":"key"},"startUpCommand":{"type":"string","description":"Startup command ","ignoreCase":"key"},"customWebConfig":{"type":"string","description":"Generate web.config parameters for Python, Node.js, Go and Java apps","ignoreCase":"key"},"appSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"configurationStrings":{"type":"string","description":"Configuration settings","ignoreCase":"key"},"deploymentMethod":{"description":"Deployment method","ignoreCase":"all","enum":["auto","zipDeploy","runFromPackage"]}},"additionalProperties":false,"required":["azureSubscription","appType","appName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure CLI\n\nRun Azure CLI commands against an Azure subscription in a Shell script when running on Linux agent or Batch script when running on Windows agent.","ignoreCase":"value","pattern":"^AzureCLI@1$"},"inputs":{"description":"Azure CLI inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["connectedServiceNameARM"]},"scriptLocation":{"description":"Script Location","ignoreCase":"all","enum":["inlineScript","scriptPath"]},"scriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"inlineScript":{"type":"string","description":"Inline Script","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key","aliases":["args"]},"addSpnToEnvironment":{"type":"boolean","description":"Access service principal details in script","ignoreCase":"key"},"useGlobalConfig":{"type":"boolean","description":"Use global Azure CLI configuration","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure CLI\n\nRun Azure CLI commands against an Azure subscription in a PowerShell Core/Shell script when running on Linux agent or PowerShell/PowerShell Core/Batch script when running on Windows agent.","ignoreCase":"value","pattern":"^AzureCLI@2$"},"inputs":{"description":"Azure CLI inputs","properties":{"azureSubscription":{"type":"string","description":"Azure Resource Manager connection","ignoreCase":"key","aliases":["connectedServiceNameARM"]},"scriptType":{"description":"Script Type","ignoreCase":"all","enum":["ps","pscore","batch","bash"]},"scriptLocation":{"description":"Script Location","ignoreCase":"all","enum":["inlineScript","scriptPath"]},"scriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"inlineScript":{"type":"string","description":"Inline Script","ignoreCase":"key"},"arguments":{"type":"string","description":"Script Arguments","ignoreCase":"key","aliases":["scriptArguments"]},"powerShellErrorActionPreference":{"description":"ErrorActionPreference","ignoreCase":"all","enum":["stop","continue","silentlyContinue"]},"addSpnToEnvironment":{"type":"boolean","description":"Access service principal details in script","ignoreCase":"key"},"useGlobalConfig":{"type":"boolean","description":"Use global Azure CLI configuration","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"powerShellIgnoreLASTEXITCODE":{"type":"boolean","description":"Ignore $LASTEXITCODE","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","scriptType"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure CLI Preview\n\nRun a Shell or Batch script with Azure CLI commands against an azure subscription","ignoreCase":"value","pattern":"^AzureCLI@0$"},"inputs":{"description":"Azure CLI Preview inputs","properties":{"connectedServiceNameSelector":{"description":"Azure Connection Type","ignoreCase":"all","enum":["connectedServiceName","connectedServiceNameARM"]},"connectedServiceNameARM":{"type":"string","description":"AzureRM Subscription","ignoreCase":"key"},"connectedServiceName":{"type":"string","description":"Azure Classic Subscription","ignoreCase":"key"},"scriptLocation":{"description":"Script Location","ignoreCase":"all","enum":["inlineScript","scriptPath"]},"scriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"inlineScript":{"type":"string","description":"Inline Script","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"cwd":{"type":"string","description":"Working Directory","ignoreCase":"key"},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild VC Error Codes Plugin\n\nInstalls and configures the MicroBuild VC Error Codes plugin for use during the build","ignoreCase":"value","pattern":"^MicroBuildVCErrorCodesPlugin@2$"},"inputs":{"description":"MicroBuild VC Error Codes Plugin inputs","properties":{"version":{"type":"string","description":"Plugin Version Override","ignoreCase":"key"},"feedSource":{"type":"string","description":"NuGet feed location where the plugin is located","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Azure Cosmos DB Emulator\n\nCreate and start an Azure Cosmos DB Emulator container for testing","ignoreCase":"value","pattern":"^CosmosDbEmulator@2$"},"inputs":{"description":"Azure Cosmos DB Emulator inputs","properties":{"containerName":{"type":"string","description":"Container Name","ignoreCase":"key"},"enableAPI":{"type":"string","description":"API","ignoreCase":"key"},"portMapping":{"type":"string","description":"Port mapping","ignoreCase":"key"},"hostDirectory":{"type":"string","description":"Host Directory","ignoreCase":"key"},"consistency":{"description":"Consistency Level","ignoreCase":"all","enum":["BoundedStaleness","Eventual","Session","Strong"]},"partitionCount":{"type":"string","description":"Number of 10GB data partitions to allocate","ignoreCase":"key"},"defaultPartitionCount":{"type":"string","description":"Number of 10GB partitions to reserve per partitioned collection","ignoreCase":"key"},"simulateRateLimiting":{"type":"boolean","description":"Simulate Rate Limiting","ignoreCase":"key"},"trace":{"type":"boolean","description":"Enable Tracing","ignoreCase":"key"},"startingTimeout":{"type":"string","description":"Emulator Start Timeout","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Codesign Verification\n\nVerifies that files have been correctly codesigned","ignoreCase":"value","pattern":"^MicroBuildCodesignVerify@2$"},"inputs":{"description":"MicroBuild Codesign Verification inputs","properties":{"TargetFolders":{"type":"string","description":"Folders to Verify","ignoreCase":"key"},"WhiteListPathForCerts":{"type":"string","description":"Location of WhiteList File for Authenticode Certificates","ignoreCase":"key"},"WhiteListPathForSigs":{"type":"string","description":"Location of WhiteList File for Strong Name Signatures","ignoreCase":"key"},"ExcludeSNVerify":{"type":"boolean","description":"Exclude Strong Name Verification","ignoreCase":"key"},"ExcludeFolders":{"type":"string","description":"Folders to Exclude","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"MicroBuild Codesign Verification\n\nVerifies that files have been correctly codesigned","ignoreCase":"value","pattern":"^MicroBuildCodesignVerify@3$"},"inputs":{"description":"MicroBuild Codesign Verification inputs","properties":{"TargetFolders":{"type":"string","description":"Folders to Verify","ignoreCase":"key"},"ApprovalListPathForCerts":{"type":"string","description":"Location of approval list File for Authenticode Certificates","ignoreCase":"key"},"ApprovalListPathForSigs":{"type":"string","description":"Location of approval list File for Strong Name Signatures","ignoreCase":"key"},"ExcludeSNVerify":{"type":"boolean","description":"Exclude Strong Name Verification","ignoreCase":"key"},"ExcludeFolders":{"type":"string","description":"Folders to Exclude","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"GitHub Release\n\nCreate, edit, or delete a GitHub release","ignoreCase":"value","pattern":"^GitHubRelease@1$"},"inputs":{"description":"GitHub Release inputs","properties":{"gitHubConnection":{"type":"string","description":"GitHub connection (OAuth or PAT)","ignoreCase":"key"},"repositoryName":{"type":"string","description":"Repository","ignoreCase":"key"},"action":{"description":"Action","ignoreCase":"all","enum":["create","edit","delete"]},"target":{"type":"string","description":"Target","ignoreCase":"key"},"tagSource":{"description":"Tag source","ignoreCase":"all","enum":["gitTag","userSpecifiedTag"]},"tagPattern":{"type":"string","description":"Tag Pattern","ignoreCase":"key"},"tag":{"type":"string","description":"Tag","ignoreCase":"key"},"title":{"type":"string","description":"Release title","ignoreCase":"key"},"releaseNotesSource":{"description":"Release notes source","ignoreCase":"all","enum":["filePath","inline"]},"releaseNotesFilePath":{"type":"string","description":"Release notes file path","ignoreCase":"key"},"releaseNotesInline":{"type":"string","description":"Release notes","ignoreCase":"key"},"assets":{"type":"string","description":"Assets","ignoreCase":"key"},"assetUploadMode":{"description":"Asset upload mode","ignoreCase":"all","enum":["delete","replace"]},"isDraft":{"type":"boolean","description":"Draft release","ignoreCase":"key"},"isPreRelease":{"type":"boolean","description":"Pre-release","ignoreCase":"key"},"addChangeLog":{"type":"boolean","description":"Add changelog","ignoreCase":"key"},"changeLogCompareToRelease":{"description":"Compare to","ignoreCase":"all","enum":["lastFullRelease","lastNonDraftRelease","lastNonDraftReleaseByTag"]},"changeLogCompareToReleaseTag":{"type":"string","description":"Release Tag","ignoreCase":"key"},"changeLogType":{"description":"Changelog type","ignoreCase":"all","enum":["commitBased","issueBased"]},"changeLogLabels":{"type":"string","description":"Categories","ignoreCase":"key"}},"additionalProperties":false,"required":["gitHubConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"GitHub Release\n\nCreate, edit, or delete a GitHub release","ignoreCase":"value","pattern":"^GitHubRelease@0$"},"inputs":{"description":"GitHub Release inputs","properties":{"gitHubConnection":{"type":"string","description":"GitHub connection (OAuth or PAT)","ignoreCase":"key"},"repositoryName":{"type":"string","description":"Repository","ignoreCase":"key"},"action":{"description":"Action","ignoreCase":"all","enum":["create","edit","delete"]},"target":{"type":"string","description":"Target","ignoreCase":"key"},"tagSource":{"description":"Tag source","ignoreCase":"all","enum":["auto","manual"]},"tagPattern":{"type":"string","description":"Tag Pattern","ignoreCase":"key"},"tag":{"type":"string","description":"Tag","ignoreCase":"key"},"title":{"type":"string","description":"Release title","ignoreCase":"key"},"releaseNotesSource":{"description":"Release notes source","ignoreCase":"all","enum":["file","input"]},"releaseNotesFile":{"type":"string","description":"Release notes file path","ignoreCase":"key"},"releaseNotes":{"type":"string","description":"Release notes","ignoreCase":"key"},"assets":{"type":"string","description":"Assets","ignoreCase":"key"},"assetUploadMode":{"description":"Asset upload mode","ignoreCase":"all","enum":["delete","replace"]},"isDraft":{"type":"boolean","description":"Draft release","ignoreCase":"key"},"isPreRelease":{"type":"boolean","description":"Pre-release","ignoreCase":"key"},"addChangeLog":{"type":"boolean","description":"Add changelog","ignoreCase":"key"},"changeLogCompareToRelease":{"description":"Compare to","ignoreCase":"all","enum":["lastFullRelease","lastNonDraftRelease","lastNonDraftReleaseByTag"]},"changeLogCompareToReleaseTag":{"type":"string","description":"Release Tag","ignoreCase":"key"},"changeLogType":{"description":"Changelog type","ignoreCase":"all","enum":["commitBased","issueBased"]},"changeLogLabels":{"type":"string","description":"Categories","ignoreCase":"key"}},"additionalProperties":false,"required":["gitHubConnection"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"cURL Upload Files\n\nUse cURL to upload files with FTP, FTPS, SFTP, HTTP, and more.","ignoreCase":"value","pattern":"^cURLUploader@1$"},"inputs":{"description":"cURL Upload Files inputs","properties":{"files":{"type":"string","description":"Files","ignoreCase":"key"},"username":{"type":"string","description":"Username","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"url":{"type":"string","description":"URL","ignoreCase":"key"},"options":{"type":"string","description":"Optional Arguments","ignoreCase":"key"},"redirectStderr":{"type":"boolean","description":"Redirect Standard Error to Standard Out","ignoreCase":"key"}},"additionalProperties":false,"required":["files","url"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"cURL upload files\n\nUse cURL's supported protocols to upload files","ignoreCase":"value","pattern":"^cURLUploader@2$"},"inputs":{"description":"cURL upload files inputs","properties":{"files":{"type":"string","description":"Files","ignoreCase":"key"},"authType":{"description":"Authentication Method","ignoreCase":"all","enum":["ServiceEndpoint","UserAndPass"]},"serviceEndpoint":{"type":"string","description":"Service Connection","ignoreCase":"key"},"username":{"type":"string","description":"Username","ignoreCase":"key"},"password":{"type":"string","description":"Password","ignoreCase":"key"},"url":{"type":"string","description":"URL","ignoreCase":"key"},"remotePath":{"type":"string","description":"Remote Directory","ignoreCase":"key"},"options":{"type":"string","description":"Optional Arguments","ignoreCase":"key"},"redirectStderr":{"type":"boolean","description":"Redirect Standard Error to Standard Out","ignoreCase":"key"}},"additionalProperties":false,"required":["files"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure App Service Settings\n\nUpdate/Add App settings an Azure Web App for Linux or Windows","ignoreCase":"value","pattern":"^AzureAppServiceSettings@1$"},"inputs":{"description":"Azure App Service Settings inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"appName":{"type":"string","description":"App Service name","ignoreCase":"key"},"resourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"slotName":{"type":"string","description":"Slot","ignoreCase":"key"},"appSettings":{"type":"string","description":"App settings","ignoreCase":"key"},"generalSettings":{"type":"string","description":"General settings","ignoreCase":"key"},"connectionStrings":{"type":"string","description":"Connection Strings","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","appName","resourceGroupName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Universal packages\n\nDownload or publish Universal Packages","ignoreCase":"value","pattern":"^UniversalPackages@0$"},"inputs":{"description":"Universal packages inputs","properties":{"command":{"description":"Command","ignoreCase":"all","enum":["download","publish"]},"downloadDirectory":{"type":"string","description":"Destination directory","ignoreCase":"key","aliases":["downloadDirectory"]},"feedsToUse":{"description":"Feed location","ignoreCase":"all","enum":["internal","external"],"aliases":["internalOrExternalDownload"]},"externalFeedCredentials":{"type":"string","description":"organization/collection connection","ignoreCase":"key","aliases":["externalEndpoint"]},"vstsFeed":{"type":"string","description":"Feed","ignoreCase":"key","aliases":["feedListDownload"]},"vstsFeedPackage":{"type":"string","description":"Package name","ignoreCase":"key","aliases":["packageListDownload"]},"vstsPackageVersion":{"type":"string","description":"Version","ignoreCase":"key","aliases":["versionListDownload"]},"feedDownloadExternal":{"type":"string","description":"Feed (or Project/Feed if the feed was created in a project)","ignoreCase":"key"},"packageDownloadExternal":{"type":"string","description":"Package name","ignoreCase":"key"},"versionDownloadExternal":{"type":"string","description":"Version","ignoreCase":"key"},"publishDirectory":{"type":"string","description":"Path to file(s) to publish","ignoreCase":"key","aliases":["publishDirectory"]},"feedsToUsePublish":{"description":"Feed location","ignoreCase":"all","enum":["internal","external"],"aliases":["internalOrExternalPublish"]},"publishFeedCredentials":{"type":"string","description":"organization/collection connection","ignoreCase":"key","aliases":["externalEndpoints"]},"vstsFeedPublish":{"type":"string","description":"Destination Feed","ignoreCase":"key","aliases":["feedListPublish"]},"publishPackageMetadata":{"type":"boolean","description":"Publish pipeline metadata","ignoreCase":"key"},"vstsFeedPackagePublish":{"type":"string","description":"Package name","ignoreCase":"key","aliases":["packageListPublish"]},"feedPublishExternal":{"type":"string","description":"Feed (or Project/Feed if the feed was created in a project)","ignoreCase":"key"},"packagePublishExternal":{"type":"string","description":"Package name","ignoreCase":"key"},"versionOption":{"description":"Version","ignoreCase":"all","enum":["major","minor","patch","custom"],"aliases":["versionPublishSelector"]},"versionPublish":{"type":"string","description":"Custom version","ignoreCase":"key"},"packagePublishDescription":{"type":"string","description":"Description","ignoreCase":"key"},"verbosity":{"description":"Verbosity","ignoreCase":"all","enum":["None","Trace","Debug","Information","Warning","Error","Critical"]},"publishedPackageVar":{"type":"string","description":"Package Output Variable","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Check Azure Policy compliance\n\nSecurity and compliance assessment for Azure Policy","ignoreCase":"value","pattern":"^AzurePolicyCheckGate@0$"},"inputs":{"description":"Check Azure Policy compliance inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"ResourceGroupName":{"type":"string","description":"Resource group","ignoreCase":"key"},"Resources":{"type":"string","description":"Resource name","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Function on Kubernetes\n\nDeploy Azure function to Kubernetes cluster.","ignoreCase":"value","pattern":"^AzureFunctionOnKubernetes@0$"},"inputs":{"description":"Azure Function on Kubernetes inputs","properties":{"dockerRegistryServiceConnection":{"type":"string","description":"Docker registry service connection","ignoreCase":"key"},"kubernetesServiceConnection":{"type":"string","description":"Kubernetes service connection","ignoreCase":"key"},"namespace":{"type":"string","description":"Kubernetes namespace","ignoreCase":"key"},"secretName":{"type":"string","description":"Secret Name","ignoreCase":"key"},"dockerHubNamespace":{"type":"string","description":"Docker Hub namespace","ignoreCase":"key"},"appName":{"type":"string","description":"Application Name","ignoreCase":"key"},"functionRootDirectory":{"type":"string","description":"Function root directory","ignoreCase":"key"},"waitForStability":{"type":"boolean","description":"Wait for stability","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["dockerRegistryServiceConnection","kubernetesServiceConnection","appName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"MicroBuild Retain Azure DevOps Drops\n\nRetains one or more Azure DevOps Drops permanently","ignoreCase":"value","pattern":"^MicroBuildRetainVstsDrops@1$"},"inputs":{"description":"MicroBuild Retain Azure DevOps Drops inputs","properties":{"DropNames":{"type":"string","description":"Drop Names","ignoreCase":"key"},"AccessToken":{"type":"string","description":"Drop Service Access Token","ignoreCase":"key"},"DropServiceUri":{"type":"string","description":"Drop Service Uri","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Shell script\n\nRun a shell script using Bash","ignoreCase":"value","pattern":"^ShellScript@2$"},"inputs":{"description":"Shell script inputs","properties":{"scriptPath":{"type":"string","description":"Script Path","ignoreCase":"key"},"args":{"type":"string","description":"Arguments","ignoreCase":"key"},"disableAutoCwd":{"type":"boolean","description":"Specify Working Directory","ignoreCase":"key"},"cwd":{"type":"string","description":"Working Directory","ignoreCase":"key"},"failOnStandardError":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"}},"additionalProperties":false,"required":["scriptPath"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Bash\n\nRun a Bash script on macOS, Linux, or Windows","ignoreCase":"value","pattern":"^Bash@3$"},"inputs":{"description":"Bash inputs","properties":{"targetType":{"description":"Type","ignoreCase":"all","enum":["filePath","inline"]},"filePath":{"type":"string","description":"Script Path","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"script":{"type":"string","description":"Script","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key"},"failOnStderr":{"type":"boolean","description":"Fail on Standard Error","ignoreCase":"key"},"bashEnvValue":{"type":"string","description":"Set value for BASH_ENV environment variable","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Publish build artifacts\n\nPublish build artifacts to Azure Pipelines or a Windows file share","ignoreCase":"value","pattern":"^PublishBuildArtifacts@1$"},"inputs":{"description":"Publish build artifacts inputs","properties":{"PathtoPublish":{"type":"string","description":"Path to publish","ignoreCase":"key"},"ArtifactName":{"type":"string","description":"Artifact name","ignoreCase":"key"},"publishLocation":{"description":"Artifact publish location","ignoreCase":"all","enum":["Container","FilePath"],"aliases":["ArtifactType"]},"TargetPath":{"type":"string","description":"File share path","ignoreCase":"key"},"Parallel":{"type":"boolean","description":"Parallel copy","ignoreCase":"key"},"ParallelCount":{"type":"integer","description":"Parallel count","ignoreCase":"key"},"FileCopyOptions":{"type":"string","description":"File copy options","ignoreCase":"key"},"StoreAsTar":{"type":"boolean","description":"Tar the artifact before uploading","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Install SSH key\n\nInstall an SSH key prior to a build or deployment","ignoreCase":"value","pattern":"^InstallSSHKey@0$"},"inputs":{"description":"Install SSH key inputs","properties":{"knownHostsEntry":{"type":"string","description":"Known Hosts Entry","ignoreCase":"key","aliases":["hostName"]},"sshPublicKey":{"type":"string","description":"SSH Public Key","ignoreCase":"key"},"sshPassphrase":{"type":"string","description":"SSH Passphrase","ignoreCase":"key"},"sshKeySecureFile":{"type":"string","description":"SSH Key","ignoreCase":"key"},"addEntryToConfig":{"type":"boolean","description":"Add entry to SSH config","ignoreCase":"key"},"configHostAlias":{"type":"string","description":"Alias","ignoreCase":"key"},"configHostname":{"type":"string","description":"Host name","ignoreCase":"key"},"configUser":{"type":"string","description":"User","ignoreCase":"key"},"configPort":{"type":"string","description":"Port","ignoreCase":"key"}},"additionalProperties":false,"required":["knownHostsEntry","sshKeySecureFile"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure VM scale set deployment\n\nDeploy a virtual machine scale set image","ignoreCase":"value","pattern":"^AzureVmssDeployment@0$"},"inputs":{"description":"Azure VM scale set deployment inputs","properties":{"azureSubscription":{"type":"string","description":"Azure subscription","ignoreCase":"key","aliases":["ConnectedServiceName"]},"action":{"description":"Action","ignoreCase":"all","enum":["Update image","Configure application startup"]},"vmssName":{"type":"string","description":"Virtual Machine scale set name","ignoreCase":"key"},"vmssOsType":{"description":"OS type","ignoreCase":"all","enum":["Windows","Linux"]},"imageUrl":{"type":"string","description":"Image URL","ignoreCase":"key"},"customScriptsDirectory":{"type":"string","description":"Custom script directory","ignoreCase":"key"},"customScript":{"type":"string","description":"Command","ignoreCase":"key"},"customScriptArguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"customScriptsStorageAccount":{"type":"string","description":"Azure storage account where custom scripts will be uploaded","ignoreCase":"key"},"skipArchivingCustomScripts":{"type":"boolean","description":"Skip Archiving custom scripts","ignoreCase":"key"}},"additionalProperties":false,"required":["azureSubscription","vmssName","vmssOsType","imageUrl"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Tag Build or Release\n\nAdds tags to a build or release","ignoreCase":"value","pattern":"^tagBuildOrRelease@0$"},"inputs":{"description":"Tag Build or Release inputs","properties":{"type":{"description":"Type","ignoreCase":"all","enum":["Build","Release"]},"tags":{"type":"string","description":"Tags","ignoreCase":"key"}},"additionalProperties":false,"required":["tags"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure App Service: Classic (Deprecated)\n\nCreate or update Azure App Service using Azure PowerShell","ignoreCase":"value","pattern":"^AzureWebPowerShellDeployment@1$"},"inputs":{"description":"Azure App Service: Classic (Deprecated) inputs","properties":{"ConnectedServiceName":{"type":"string","description":"Azure Subscription (Classic)","ignoreCase":"key"},"WebSiteLocation":{"type":"string","description":"Web App Location","ignoreCase":"key"},"WebSiteName":{"type":"string","description":"Web App Name","ignoreCase":"key"},"Slot":{"type":"string","description":"Slot","ignoreCase":"key"},"Package":{"type":"string","description":"Web Deploy Package","ignoreCase":"key"},"doNotDelete":{"type":"boolean","description":"Set DoNotDelete flag","ignoreCase":"key"},"AdditionalArguments":{"type":"string","description":"Additional Arguments","ignoreCase":"key"}},"additionalProperties":false,"required":["ConnectedServiceName","WebSiteLocation","WebSiteName","Package"]}},"deprecationMessage":"AzureWebPowerShellDeployment is deprecated - Create or update Azure App Service using Azure PowerShell","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Azure Cloud Service deployment\n\nDeploy an Azure Cloud Service","ignoreCase":"value","pattern":"^AzureCloudPowerShellDeployment@1$"},"inputs":{"description":"Azure Cloud Service deployment inputs","properties":{"azureClassicSubscription":{"type":"string","description":"Azure subscription (Classic)","ignoreCase":"key","aliases":["ConnectedServiceName"]},"EnableAdvancedStorageOptions":{"type":"boolean","description":"Enable ARM storage support","ignoreCase":"key"},"StorageAccount":{"type":"string","description":"Storage account (Classic)","ignoreCase":"key"},"ARMConnectedServiceName":{"type":"string","description":"Azure subscription (ARM)","ignoreCase":"key"},"ARMStorageAccount":{"type":"string","description":"Storage account (ARM)","ignoreCase":"key"},"ServiceName":{"type":"string","description":"Service name","ignoreCase":"key"},"ServiceLocation":{"type":"string","description":"Service location","ignoreCase":"key"},"CsPkg":{"type":"string","description":"CsPkg","ignoreCase":"key"},"CsCfg":{"type":"string","description":"CsCfg","ignoreCase":"key"},"slotName":{"type":"string","description":"Environment (Slot)","ignoreCase":"key","aliases":["Slot"]},"DeploymentLabel":{"type":"string","description":"Deployment label","ignoreCase":"key"},"AppendDateTimeToLabel":{"type":"boolean","description":"Append current date and time","ignoreCase":"key"},"AllowUpgrade":{"type":"boolean","description":"Allow upgrade","ignoreCase":"key"},"SimultaneousUpgrade":{"type":"boolean","description":"Simultaneous upgrade","ignoreCase":"key"},"ForceUpgrade":{"type":"boolean","description":"Force upgrade","ignoreCase":"key"},"VerifyRoleInstanceStatus":{"type":"boolean","description":"Verify role instance status","ignoreCase":"key"},"DiagnosticStorageAccountKeys":{"type":"string","description":"Diagnostic storage account keys","ignoreCase":"key"},"NewServiceCustomCertificates":{"type":"string","description":"Custom certificates to import","ignoreCase":"key"},"NewServiceAdditionalArguments":{"type":"string","description":"Additional arguments","ignoreCase":"key"},"NewServiceAffinityGroup":{"type":"string","description":"Affinity group","ignoreCase":"key"}},"additionalProperties":false,"required":["azureClassicSubscription","ServiceName","ServiceLocation","CsPkg","CsCfg"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Delete files\n\nDelete folders, or files matching a pattern","ignoreCase":"value","pattern":"^DeleteFiles@1$"},"inputs":{"description":"Delete files inputs","properties":{"SourceFolder":{"type":"string","description":"Source Folder","ignoreCase":"key"},"Contents":{"type":"string","description":"Contents","ignoreCase":"key"},"RemoveSourceFolder":{"type":"boolean","description":"Remove SourceFolder","ignoreCase":"key"},"RemoveDotFiles":{"type":"boolean","description":"Remove files starting with a dot","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"gulp\n\nRun the gulp Node.js streaming task-based build system","ignoreCase":"value","pattern":"^gulp@1$"},"inputs":{"description":"gulp inputs","properties":{"gulpFile":{"type":"string","description":"gulp File Path","ignoreCase":"key"},"targets":{"type":"string","description":"gulp Task(s)","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"gulpjs":{"type":"string","description":"gulp.js location","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test Results Files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"enableCodeCoverage":{"type":"boolean","description":"Enable code Coverage","ignoreCase":"key"},"testFramework":{"description":"Test Framework","ignoreCase":"all","enum":["Mocha","Jasmine"]},"srcFiles":{"type":"string","description":"Source Files","ignoreCase":"key"},"testFiles":{"type":"string","description":"Test Script Files","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"gulp\n\nRun the gulp Node.js streaming task-based build system","ignoreCase":"value","pattern":"^gulp@0$"},"inputs":{"description":"gulp inputs","properties":{"gulpFile":{"type":"string","description":"gulp File Path","ignoreCase":"key"},"targets":{"type":"string","description":"gulp Task(s)","ignoreCase":"key"},"arguments":{"type":"string","description":"Arguments","ignoreCase":"key"},"workingDirectory":{"type":"string","description":"Working Directory","ignoreCase":"key","aliases":["cwd"]},"gulpjs":{"type":"string","description":"gulp.js location","ignoreCase":"key"},"publishJUnitResults":{"type":"boolean","description":"Publish to Azure Pipelines","ignoreCase":"key"},"testResultsFiles":{"type":"string","description":"Test Results Files","ignoreCase":"key"},"testRunTitle":{"type":"string","description":"Test Run Title","ignoreCase":"key"},"enableCodeCoverage":{"type":"boolean","description":"Enable code Coverage","ignoreCase":"key"},"testFramework":{"description":"Test Framework","ignoreCase":"all","enum":["Mocha","Jasmine"]},"srcFiles":{"type":"string","description":"Source Files","ignoreCase":"key"},"testFiles":{"type":"string","description":"Test Script Files","ignoreCase":"key"}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]},{"properties":{"task":{"description":"Cloud-based web performance test\n\nRun a quick web performance test in the cloud with Azure Pipelines","ignoreCase":"value","pattern":"^QuickPerfTest@1$"},"inputs":{"description":"Cloud-based web performance test inputs","properties":{"connectedServiceName":{"type":"string","description":"Azure Pipelines Connection","ignoreCase":"key"},"websiteUrl":{"type":"string","description":"Website URL","ignoreCase":"key"},"testName":{"type":"string","description":"Test Name","ignoreCase":"key"},"vuLoad":{"description":"User Load","ignoreCase":"all","enum":["25","50","100","250"]},"runDuration":{"description":"Run Duration (sec)","ignoreCase":"all","enum":["60","120","180","240","300"]},"geoLocation":{"description":"Load Location","ignoreCase":"all","enum":["Default","Australia East","Australia Southeast","Brazil South","Central India","Central US","East Asia","East US 2","East US","Japan East","Japan West","North Central US","North Europe","South Central US","South India","Southeast Asia","West Europe","West US"]},"machineType":{"description":"Run load test using","ignoreCase":"all","enum":["0","2"]},"resourceGroupName":{"type":"string","description":"Resource group rig","ignoreCase":"key"},"numOfSelfProvisionedAgents":{"type":"integer","description":"No. of agents to use","ignoreCase":"key"},"avgResponseTimeThreshold":{"type":"string","description":"Fail test if Avg.Response Time(ms) exceeds","ignoreCase":"key"}},"additionalProperties":false,"required":["websiteUrl","testName"]}},"deprecationMessage":"QuickPerfTest is deprecated - Run a quick web performance test in the cloud with Azure Pipelines","doNotSuggest":true,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"IIS web app manage\n\nCreate or update websites, web apps, virtual directories, or application pools","ignoreCase":"value","pattern":"^IISWebAppManagementOnMachineGroup@0$"},"inputs":{"description":"IIS web app manage inputs","properties":{"EnableIIS":{"type":"boolean","description":"Enable IIS","ignoreCase":"key"},"IISDeploymentType":{"description":"Configuration type","ignoreCase":"all","enum":["IISWebsite","IISWebApplication","IISVirtualDirectory","IISApplicationPool"]},"ActionIISWebsite":{"description":"Action","ignoreCase":"all","enum":["CreateOrUpdateWebsite","StartWebsite","StopWebsite"]},"ActionIISApplicationPool":{"description":"Action","ignoreCase":"all","enum":["CreateOrUpdateAppPool","StartAppPool","StopAppPool","RecycleAppPool"]},"StartStopWebsiteName":{"type":"string","description":"Website name","ignoreCase":"key"},"WebsiteName":{"type":"string","description":"Website name","ignoreCase":"key"},"WebsitePhysicalPath":{"type":"string","description":"Physical path","ignoreCase":"key"},"WebsitePhysicalPathAuth":{"description":"Physical path authentication","ignoreCase":"all","enum":["WebsiteUserPassThrough","WebsiteWindowsAuth"]},"WebsiteAuthUserName":{"type":"string","description":"Username","ignoreCase":"key"},"WebsiteAuthUserPassword":{"type":"string","description":"Password","ignoreCase":"key"},"AddBinding":{"type":"boolean","description":"Add binding","ignoreCase":"key"},"Protocol":{"description":"Protocol","ignoreCase":"all","enum":["https","http"]},"IPAddress":{"type":"string","description":"IP address","ignoreCase":"key"},"Port":{"type":"string","description":"Port","ignoreCase":"key"},"ServerNameIndication":{"type":"boolean","description":"Server Name Indication required","ignoreCase":"key"},"HostNameWithOutSNI":{"type":"string","description":"Host name","ignoreCase":"key"},"HostNameWithHttp":{"type":"string","description":"Host name","ignoreCase":"key"},"HostNameWithSNI":{"type":"string","description":"Host name","ignoreCase":"key"},"SSLCertThumbPrint":{"type":"string","description":"SSL certificate thumbprint","ignoreCase":"key"},"Bindings":{"type":"string","description":"Add bindings","ignoreCase":"key"},"CreateOrUpdateAppPoolForWebsite":{"type":"boolean","description":"Create or update app pool","ignoreCase":"key"},"ConfigureAuthenticationForWebsite":{"type":"boolean","description":"Configure authentication","ignoreCase":"key"},"AppPoolNameForWebsite":{"type":"string","description":"Name","ignoreCase":"key"},"DotNetVersionForWebsite":{"description":".NET version","ignoreCase":"all","enum":["v4.0","v2.0","No Managed Code"]},"PipeLineModeForWebsite":{"description":"Managed pipeline mode","ignoreCase":"all","enum":["Integrated","Classic"]},"AppPoolIdentityForWebsite":{"description":"Identity","ignoreCase":"all","enum":["ApplicationPoolIdentity","LocalService","LocalSystem","NetworkService","SpecificUser"]},"AppPoolUsernameForWebsite":{"type":"string","description":"Username","ignoreCase":"key"},"AppPoolPasswordForWebsite":{"type":"string","description":"Password","ignoreCase":"key"},"AnonymousAuthenticationForWebsite":{"type":"boolean","description":"Anonymous authentication","ignoreCase":"key"},"BasicAuthenticationForWebsite":{"type":"boolean","description":"Basic authentication","ignoreCase":"key"},"WindowsAuthenticationForWebsite":{"type":"boolean","description":"Windows authentication","ignoreCase":"key"},"ParentWebsiteNameForVD":{"type":"string","description":"Parent website name","ignoreCase":"key"},"VirtualPathForVD":{"type":"string","description":"Virtual path","ignoreCase":"key"},"PhysicalPathForVD":{"type":"string","description":"Physical path","ignoreCase":"key"},"VDPhysicalPathAuth":{"description":"Physical path authentication","ignoreCase":"all","enum":["VDUserPassThrough","VDWindowsAuth"]},"VDAuthUserName":{"type":"string","description":"Username","ignoreCase":"key"},"VDAuthUserPassword":{"type":"string","description":"Password","ignoreCase":"key"},"ParentWebsiteNameForApplication":{"type":"string","description":"Parent website name","ignoreCase":"key"},"VirtualPathForApplication":{"type":"string","description":"Virtual path","ignoreCase":"key"},"PhysicalPathForApplication":{"type":"string","description":"Physical path","ignoreCase":"key"},"ApplicationPhysicalPathAuth":{"description":"Physical path authentication","ignoreCase":"all","enum":["ApplicationUserPassThrough","ApplicationWindowsAuth"]},"ApplicationAuthUserName":{"type":"string","description":"Username","ignoreCase":"key"},"ApplicationAuthUserPassword":{"type":"string","description":"Password","ignoreCase":"key"},"CreateOrUpdateAppPoolForApplication":{"type":"boolean","description":"Create or update app pool","ignoreCase":"key"},"AppPoolNameForApplication":{"type":"string","description":"Name","ignoreCase":"key"},"DotNetVersionForApplication":{"description":".NET version","ignoreCase":"all","enum":["v4.0","v2.0","No Managed Code"]},"PipeLineModeForApplication":{"description":"Managed pipeline mode","ignoreCase":"all","enum":["Integrated","Classic"]},"AppPoolIdentityForApplication":{"description":"Identity","ignoreCase":"all","enum":["ApplicationPoolIdentity","LocalService","LocalSystem","NetworkService","SpecificUser"]},"AppPoolUsernameForApplication":{"type":"string","description":"Username","ignoreCase":"key"},"AppPoolPasswordForApplication":{"type":"string","description":"Password","ignoreCase":"key"},"AppPoolName":{"type":"string","description":"Name","ignoreCase":"key"},"DotNetVersion":{"description":".NET version","ignoreCase":"all","enum":["v4.0","v2.0","No Managed Code"]},"PipeLineMode":{"description":"Managed pipeline mode","ignoreCase":"all","enum":["Integrated","Classic"]},"AppPoolIdentity":{"description":"Identity","ignoreCase":"all","enum":["ApplicationPoolIdentity","LocalService","LocalSystem","NetworkService","SpecificUser"]},"AppPoolUsername":{"type":"string","description":"Username","ignoreCase":"key"},"AppPoolPassword":{"type":"string","description":"Password","ignoreCase":"key"},"StartStopRecycleAppPoolName":{"type":"string","description":"Application pool name","ignoreCase":"key"},"AppCmdCommands":{"type":"string","description":"Additional appcmd.exe commands","ignoreCase":"key"}},"additionalProperties":false,"required":["WebsiteName","Bindings","AppPoolNameForWebsite","ParentWebsiteNameForVD","VirtualPathForVD","ParentWebsiteNameForApplication","VirtualPathForApplication","AppPoolNameForApplication","AppPoolName"]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task","inputs"]},{"properties":{"task":{"description":"Docker CLI installer\n\nInstall Docker CLI on agent machine.","ignoreCase":"value","pattern":"^DockerInstaller@0$"},"inputs":{"description":"Docker CLI installer inputs","properties":{"dockerVersion":{"type":"string","description":"Docker Version","ignoreCase":"key"},"releaseType":{"description":"Release type","ignoreCase":"all","enum":["stable","edge","test","nightly"]}},"additionalProperties":false,"required":[]}},"doNotSuggest":false,"firstProperty":["task"],"required":["task"]}]}}} \ No newline at end of file From 6f9dcb40d2f5c73972aad50533785fef15739a12 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 6 Sep 2024 14:16:02 -0700 Subject: [PATCH 042/100] Update Roslyn version and changelog --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ae4fa3c7..5ee13b616 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 +* Update Roslyn to 4.12.0-3.24456.2 (PR: [#7525](https://github.com/dotnet/vscode-csharp/pull/7525)) + * Avoid BuildHost crash in Mono due to missing types (PR: [#74994](https://github.com/dotnet/roslyn/pull/74994)) +* Turn off word suggestions in XAML completions (PR: [#7516](https://github.com/dotnet/vscode-csharp/pull/7516)) * Bump xamltools to 17.12.35305.252 (PR: [#7521](https://github.com/dotnet/vscode-csharp/pull/7521)) * XAML editor enabled various lightbulbs related to x:DataType, BindingContext and Bindings. diff --git a/package.json b/package.json index a8730f053..d8b4470e1 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.12.0-3.24430.2", + "roslyn": "4.12.0-3.24456.2", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24427.2", "razorOmnisharp": "7.0.0-preview.23363.1", From 6ac3fb6c4c74e475874e53cc1d43a503af184c8c Mon Sep 17 00:00:00 2001 From: dibarbet Date: Fri, 6 Sep 2024 23:04:26 +0000 Subject: [PATCH 043/100] Update main version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 4ff89a79c..daaeeb396 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.47", + "version": "2.48", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 5a35b2ebddd790b5f767c47f0b1bb3e550a8e902 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 6 Sep 2024 21:25:07 -0700 Subject: [PATCH 044/100] Move OmniSharp test code under the /test folder --- .config/guardian/.gdnbaselines | 4 +- .vscode/launch.json | 16 +++--- .vscodeignore | 1 - __mocks__/vscode.ts | 2 +- jest.config.ts | 14 ++--- tasks/testTasks.ts | 22 ++++--- test/{unitTests => }/fakes.ts | 12 ++-- .../artifactTests/jest.config.ts | 2 +- .../artifactTests/vsix.test.ts | 0 .../buildDiagnostics.integration.test.ts | 2 +- .../classification.integration.test.ts | 0 .../codelens.integration.test.ts | 0 .../commandEnablement.integration.test.ts | 0 .../completion.integration.test.ts | 0 .../integrationTests/diagnosticsHelpers.ts | 0 .../documentDiagnostics.integration.test.ts | 2 +- ...documentSymbolProvider.integration.test.ts | 0 .../integrationTests/expectedCommands.ts | 0 .../formatting.integration.test.ts | 0 ...formattingEditorConfig.integration.test.ts | 0 .../integrationTests/formattingTestHelpers.ts | 0 .../gotoDefinition.integration.test.ts | 0 .../gotoImplementation.integration.test.ts | 0 .../hover.integration.test.ts | 0 .../integrationTests}/index.ts | 2 +- .../integrationTests/integrationHelpers.ts | 4 +- .../integrationTests/jest.config.ts | 6 +- .../lspInlayHints.integration.test.ts | 0 .../onAutoInsert.integration.test.ts | 0 .../references.integration.test.ts | 0 .../signatureHelp.integration.test.ts | 0 .../integrationTests}/testAssets/NuGet.config | 0 .../testAssets/basicRazorApp21.ts | 0 .../testAssets/singleCsproj.ts | 0 .../testAssets/slnFilterWithCsproj.ts | 0 .../testAssets/slnWithCsproj.ts | 0 .../testAssets/slnWithCsproj}/.gitignore | 0 .../testAssets/slnWithCsproj/.runsettings | 0 ...sp_tools_host_slnWithCsproj.code-workspace | 0 ...omnisharp_lsp_slnWithCsproj.code-workspace | 0 .../omnisharp_slnWithCsproj.code-workspace | 0 .../slnWithCsproj/b_SecondInOrder_SlnFile.sln | 0 .../testAssets/slnWithCsproj}/src/app/A.cs | 0 .../src/app/BaseClassImplementation.cs | 0 .../slnWithCsproj/src/app/DocComments.cs | 0 .../slnWithCsproj/src/app/Formatting.cs | 0 .../slnWithCsproj}/src/app/ISomeInterface.cs | 0 .../slnWithCsproj}/src/app/Program.cs | 0 .../slnWithCsproj/src/app/app.csproj | 0 .../slnWithCsproj/src/app/completion.cs | 0 .../slnWithCsproj}/src/app/completionBase.cs | 0 .../slnWithCsproj/src/app/definition.cs | 0 .../slnWithCsproj}/src/app/diagnostics.cs | 0 .../slnWithCsproj}/src/app/documentSymbols.cs | 0 .../app/folderWithEditorConfig/.editorconfig | 0 .../FormattingWithEditorConfig.cs | 0 .../testAssets/slnWithCsproj/src/app/hover.cs | 0 .../slnWithCsproj}/src/app/implementation.cs | 0 .../slnWithCsproj}/src/app/inlayHints.cs | 0 .../slnWithCsproj/src/app/reference.cs | 0 .../slnWithCsproj}/src/app/remap.cs | 0 .../slnWithCsproj}/src/app/remapped.txt | 0 .../src/app/secondaryDiagnostics.cs | 0 .../slnWithCsproj}/src/app/semantictokens.cs | 0 .../slnWithCsproj/src/app/sigHelp.cs | 0 .../slnWithCsproj}/src/app/typeDefinition.cs | 0 .../slnWithCsproj}/src/lib/Class1.cs | 0 .../slnWithCsproj}/src/lib/lib.csproj | 0 .../slnWithCsproj/test/UnitTest1.cs | 0 .../testAssets/slnWithCsproj/test/test.csproj | 0 .../testAssets/slnWithGenerator.ts | 0 .../integrationTests/testAssets/spawnGit.ts | 0 .../testAssets/testAssetWorkspace.ts | 0 .../integrationTests/testAssets/testAssets.ts | 4 +- .../unitTests.integration.test.ts | 2 +- .../workspaceDiagnostics.integration.test.ts | 2 +- .../unitTests/configurationMiddleware.test.ts | 2 +- .../unitTests/jest.config.ts | 4 +- .../{ => lsptoolshost}/unitTests/json.test.ts | 2 +- ...languageServerConfigChangeObserver.test.ts | 4 +- .../unitTests/migrateOptions.test.ts | 2 +- .../unitTests/packageNlsJson.test.ts | 0 .../advisor.integration.test.ts | 2 +- .../codeActionRename.integration.test.ts | 0 .../codeLensProvider.integration.test.ts | 0 .../completionProvider.integration.test.ts | 2 +- .../definitionProvider.test.ts | 2 +- .../diagnostics.integration.test.ts | 0 ...documentSymbolProvider.integration.test.ts | 0 ...nCommentAutoFormatting.integration.test.ts | 0 .../dotnetTest.integration.test.ts | 8 +-- .../hoverProvider.integration.test.ts | 0 .../implementationProvider.test.ts | 2 +- .../omnisharpIntegrationTests}/index.ts | 2 +- .../inlayHints.integration.test.ts | 2 +- .../integrationHelpers.ts | 8 +-- .../omnisharpIntegrationTests/jest.config.ts | 6 +- .../languageMiddleware.integration.test.ts | 2 +- .../launchConfiguration.integration.test.ts | 0 .../launcher.test.ts | 4 +- .../omnisharpCommands.integration.test.ts | 6 +- .../parsedEnvironmentFile.test.ts | 2 +- .../omnisharpIntegrationTests/poll.ts | 0 .../reAnalyze.integration.test.ts | 8 +-- .../referenceProvider.test.ts | 2 +- .../semanticTokensProvider.test.ts | 0 .../signatureHelp.integration.test.ts | 0 .../sourceGeneratorDefinitionProvider.test.ts | 2 +- .../omnisharp_BasicRazorApp2_1.code-workspace | 0 ...isharp_lsp_BasicRazorApp2_1.code-workspace | 0 .../BasicRazorApp2_1/BasicRazorApp2_1.csproj | 0 .../BasicRazorApp2_1/Pages/ErrorHaver.razor | 0 .../BasicRazorApp2_1/Pages/Index.cshtml | 0 .../testAssets/BasicRazorApp2_1/Program.cs | 0 .../BasicRazorApp2_1/_ViewImports.cshtml | 0 .../testAssets/NuGet.config | 0 .../testAssets/activeTestAssetWorkspace.ts | 12 ++-- .../testAssets/omnisharpTestAssetWorkspace.ts | 8 +-- .../testAssets/singleCsproj}/.gitignore | 0 .../omnisharp_lsp_singleCsproj.code-workspace | 13 +++++ .../omnisharp_singleCsproj.code-workspace | 13 +++++ .../testAssets/singleCsproj}/A.cs | 0 .../testAssets/singleCsproj}/DocComments.cs | 0 .../singleCsproj}/ISomeInterface.cs | 0 .../testAssets/singleCsproj/Program.cs | 12 ++++ .../singleCsproj}/SomeInterfaceImpl.cs | 0 .../testAssets/singleCsproj}/completion.cs | 0 .../singleCsproj}/completionBase.cs | 0 .../testAssets/singleCsproj}/definition.cs | 0 .../testAssets/singleCsproj}/diagnostics.cs | 0 .../singleCsproj}/documentSymbols.cs | 0 .../testAssets/singleCsproj}/hover.cs | 0 .../singleCsproj}/implementation.cs | 0 .../testAssets/singleCsproj}/inlayHints.cs | 0 .../testAssets/singleCsproj}/reference.cs | 0 .../testAssets/singleCsproj}/remap.cs | 0 .../testAssets/singleCsproj}/remapped.txt | 0 .../singleCsproj}/secondaryDiagnostics.cs | 0 .../singleCsproj}/semantictokens.cs | 0 .../testAssets/singleCsproj}/sigHelp.cs | 0 .../singleCsproj/singleCsproj.csproj | 8 +++ .../singleCsproj}/typeDefinition.cs | 0 .../slnFilterWithCsproj}/.gitignore | 0 ...arp_lsp_slnFilterWithCsproj.code-workspace | 0 ...nisharp_slnFilterWithCsproj.code-workspace | 0 .../slnFilterWithCsproj/SolutionFile.sln | 0 .../slnFilterWithCsproj/SolutionFilter.slnf | 0 .../slnFilterWithCsproj}/src/app/A.cs | 0 .../src/app/DocComments.cs | 0 .../src/app/ISomeInterface.cs | 0 .../slnFilterWithCsproj}/src/app/Program.cs | 0 .../src/app/SomeInterfaceImpl.cs | 0 .../slnFilterWithCsproj/src/app/app.csproj | 0 .../src/app/completion.cs | 0 .../src/app/completionBase.cs | 0 .../src/app/definition.cs | 0 .../src/app/diagnostics.cs | 0 .../src/app/documentSymbols.cs | 0 .../slnFilterWithCsproj}/src/app/hover.cs | 0 .../src/app/implementation.cs | 0 .../src/app/inlayHints.cs | 0 .../slnFilterWithCsproj}/src/app/reference.cs | 0 .../slnFilterWithCsproj}/src/app/remap.cs | 0 .../slnFilterWithCsproj}/src/app/remapped.txt | 0 .../src/app/secondaryDiagnostics.cs | 0 .../src/app/semantictokens.cs | 0 .../slnFilterWithCsproj}/src/app/sigHelp.cs | 0 .../src/app/typeDefinition.cs | 0 .../slnFilterWithCsproj}/src/lib/Class1.cs | 0 .../slnFilterWithCsproj}/src/lib/lib.csproj | 0 .../slnFilterWithCsproj/test/UnitTest1.cs | 0 .../slnFilterWithCsproj/test/test.csproj | 0 .../testAssets/slnWithCsproj/.gitignore | 2 + .../testAssets/slnWithCsproj/.runsettings | 0 ...sp_tools_host_slnWithCsproj.code-workspace | 0 ...omnisharp_lsp_slnWithCsproj.code-workspace | 0 .../omnisharp_slnWithCsproj.code-workspace | 0 .../slnWithCsproj/b_SecondInOrder_SlnFile.sln | 0 .../testAssets/slnWithCsproj/src/app/A.cs | 1 + .../slnWithCsproj/src/app/DocComments.cs | 13 +++++ .../slnWithCsproj/src/app/ISomeInterface.cs | 6 ++ .../slnWithCsproj/src/app/Program.cs | 0 .../src/app/SomeInterfaceImpl.cs | 6 ++ .../slnWithCsproj/src/app/app.csproj | 0 .../slnWithCsproj/src/app/completion.cs | 14 +++++ .../slnWithCsproj/src/app/completionBase.cs | 14 +++++ .../slnWithCsproj/src/app/definition.cs | 16 ++++++ .../slnWithCsproj/src/app/diagnostics.cs | 12 ++++ .../slnWithCsproj/src/app/documentSymbols.cs | 57 +++++++++++++++++++ .../testAssets/slnWithCsproj/src/app/hover.cs | 16 ++++++ .../slnWithCsproj/src/app/implementation.cs | 7 +++ .../slnWithCsproj/src/app/inlayHints.cs | 29 ++++++++++ .../slnWithCsproj/src/app/reference.cs | 17 ++++++ .../testAssets/slnWithCsproj/src/app/remap.cs | 12 ++++ .../slnWithCsproj/src/app/remapped.txt | 1 + .../src/app/secondaryDiagnostics.cs | 12 ++++ .../slnWithCsproj/src/app/semantictokens.cs | 11 ++++ .../slnWithCsproj/src/app/sigHelp.cs | 23 ++++++++ .../slnWithCsproj/src/app/typeDefinition.cs | 24 ++++++++ .../slnWithCsproj/src/lib/Class1.cs | 0 .../slnWithCsproj/src/lib/lib.csproj | 0 .../slnWithCsproj/test/UnitTest1.cs | 0 .../testAssets/slnWithCsproj/test/test.csproj | 0 .../slnWithGenerator/.vscode/settings.json | 0 .../slnWithGenerator/app/GeneratorTrigger.cs | 0 .../slnWithGenerator/app/app.csproj | 0 .../generator/MainGenerator.cs | 0 .../generator/generator.csproj | 0 .../slnWithGenerator/slnWithGenerator.sln | 0 .../typeDefinitionProvider.test.ts | 2 +- ...virtualDocumentTracker.integration.test.ts | 2 +- ...orkspaceSymbolProvider.integration.test.ts | 0 .../omnisharpUnitTests/absolutePath.test.ts | 4 +- .../omnisharpUnitTests/assets.test.ts | 6 +- .../omnisharpUnitTests/common.test.ts | 2 +- .../coreclrDebug/targetArchitecture.test.ts | 6 +- .../fakes/fakeDotnetResolver.ts | 4 +- .../fakes/fakeMonoResolver.ts | 4 +- .../features/reportIssue.test.ts | 8 +-- .../informationMessageObserver.test.ts | 4 +- .../installRuntimeDependencies.test.ts | 14 ++--- .../omnisharpUnitTests/jest.config.ts | 4 +- .../backgroundWorkStatusBarObserver.test.ts | 8 +-- .../logging/csharpChannelObserver.test.ts | 6 +- .../logging/csharpLoggerObserver.test.ts | 12 ++-- .../logging/dotnetChannelObserver.test.ts | 6 +- .../logging/dotnetLoggerObserver.test.ts | 6 +- .../logging/dotnetTestChannelObserver.test.ts | 6 +- .../logging/dotnetTestLoggerObserver.test.ts | 8 +-- .../logging/errorMessageObserver.test.ts | 8 +-- .../logging/omnisharpChannelObserver.test.ts | 6 +- .../omnisharpDebugModeLoggerObserver.test.ts | 6 +- .../logging/omnisharpLoggerObserver.test.ts | 8 +-- .../omnisharpStatusBarObserver.test.ts | 6 +- .../logging/projectStatusBarObserver.test.ts | 8 +-- .../logging/razorLoggerObserver.test.ts | 6 +- .../logging/telemetryObserver.test.ts | 12 ++-- .../logging/warningMessageObserver.test.ts | 6 +- .../omnisharp/omniSharpMonoResolver.test.ts | 4 +- .../omnisharpDownloader.test.ts | 26 ++++----- .../omnisharpManager.test.ts | 24 ++++---- .../omnisharpPackageCreator.test.ts | 6 +- .../optionChangeObserver.test.ts | 4 +- .../omnisharpUnitTests/optionStream.test.ts | 4 +- .../omnisharpUnitTests/options.test.ts | 4 +- .../downloadAndInstallPackages.test.ts | 26 ++++----- .../packages/fileDownloader.test.ts | 12 ++-- .../packages/isValidDownload.test.ts | 4 +- .../packages/packageFilterer.test.ts | 8 +-- .../packages/zipInstaller.test.ts | 20 +++---- .../omnisharpUnitTests/platform.test.ts | 2 +- .../omnisharpUnitTests/processPicker.test.ts | 2 +- .../testAssets/getConfigChangeEvent.ts | 2 +- .../testAssets/mockHttpsServer.ts | 4 +- .../omnisharpUnitTests/testAssets/private.pem | 0 .../omnisharpUnitTests/testAssets/public.pem | 0 .../testAssets/testAssets.ts | 0 .../testAssets/testEventBus.ts | 6 +- .../omnisharpUnitTests/testAssets/testFile.ts | 0 .../omnisharpUnitTests/testAssets/testZip.ts | 0 .../omnisharp}/runFeatureTests.ts | 0 {omnisharptest => test/omnisharp}/testUtil.ts | 0 .../formatting.integration.test.ts | 2 +- .../hover.integration.test.ts | 2 +- .../razor/razorIntegrationTests}/index.ts | 2 +- .../razorIntegrationTests/jest.config.ts | 6 +- ...tools_host_BasicRazorApp2_1.code-workspace | 0 .../BasicRazorApp2_1/BasicRazorApp2_1.csproj | 0 .../BasicRazorApp2_1/BasicRazorApp2_1.sln | 0 .../Pages/BadlyFormatted.razor | 0 .../BasicRazorApp2_1/Pages/ErrorHaver.razor | 0 .../BasicRazorApp2_1/Pages/Index.cshtml | 0 .../testAssets/BasicRazorApp2_1/Program.cs | 0 .../BasicRazorApp2_1/_ViewImports.cshtml | 0 .../testAssets/NuGet.config | 0 .../testAssets/basicRazorApp21.ts | 2 +- .../testAssets/testAssetWorkspace.ts | 2 +- .../README.md | 0 .../JavaScript.tmLanguage.json | 0 .../embeddedGrammars/UpdateTextMate.ps1 | 0 .../embeddedGrammars/csharp.tmLanguage.json | 0 .../embeddedGrammars/css.tmLanguage.json | 0 .../embeddedGrammars/html.tmLanguage.json | 0 .../__snapshots__/grammarTests.test.ts.snap | 0 .../tests/addTagHelperDirective.ts | 0 .../tests/attributeDirective.ts | 0 .../tests/codeBlock.ts | 0 .../tests/codeDirective.ts | 0 .../tests/doStatement.ts | 0 .../tests/elsePart.ts | 0 .../tests/explicitExpressionInAttribute.ts | 0 .../tests/explicitExpressions.ts | 0 .../tests/forStatement.ts | 0 .../tests/foreachStatement.ts | 0 .../tests/functionsDirective.ts | 0 .../tests/grammarTests.test.ts | 0 .../tests/htmlDynamicAttribute.ts | 0 .../tests/ifStatement.ts | 0 .../tests/implementsDirective.ts | 0 .../tests/implicitExpressionInAttribute.ts | 0 .../tests/implicitExpressions.ts | 0 .../tests/infrastructure/ITokenizedContent.ts | 0 .../tests/infrastructure/snapshotFactory.ts | 0 .../tests/infrastructure/testUtilities.ts | 0 .../tokenizedContentProvider.ts | 10 ++-- .../tests/inheritsDirective.ts | 0 .../tests/injectDirective.ts | 0 .../tests/layoutDirective.ts | 0 .../tests/lockStatement.ts | 0 .../tests/modelDirective.ts | 0 .../tests/namespaceDirective.ts | 0 .../tests/pageDirective.ts | 0 .../tests/preservewhitespaceDirective.ts | 0 .../tests/razorComment.ts | 0 .../tests/razorTemplate.ts | 0 .../tests/removeTagHelperDirective.ts | 0 .../tests/rendermodeDirective.ts | 0 .../tests/scriptBlock.ts | 0 .../tests/sectionDirective.ts | 0 .../tests/styleBlock.ts | 0 .../tests/switchStatement.ts | 0 .../tests/tagHelperPrefixDirective.ts | 0 .../tests/transitions.ts | 0 .../tests/tryStatement.ts | 0 .../tests/typeparamDirective.ts | 0 .../tests/usingDirective.ts | 0 .../tests/usingStatement.ts | 0 .../tests/whileStatement.ts | 0 test/{ => razor}/razorTests/jest.config.ts | 2 +- .../jestSetup => }/vsCodeEnvironment.ts | 0 .../jestSetup => }/vsCodeFramework.ts | 0 wallaby.js | 6 +- 332 files changed, 625 insertions(+), 275 deletions(-) rename test/{unitTests => }/fakes.ts (96%) rename test/{ => lsptoolshost}/artifactTests/jest.config.ts (93%) rename test/{ => lsptoolshost}/artifactTests/vsix.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/buildDiagnostics.integration.test.ts (99%) rename test/{ => lsptoolshost}/integrationTests/classification.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/codelens.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/commandEnablement.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/completion.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/diagnosticsHelpers.ts (100%) rename test/{ => lsptoolshost}/integrationTests/documentDiagnostics.integration.test.ts (98%) rename test/{ => lsptoolshost}/integrationTests/documentSymbolProvider.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/expectedCommands.ts (100%) rename test/{ => lsptoolshost}/integrationTests/formatting.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/formattingEditorConfig.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/formattingTestHelpers.ts (100%) rename test/{ => lsptoolshost}/integrationTests/gotoDefinition.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/gotoImplementation.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/hover.integration.test.ts (100%) rename test/{razorIntegrationTests => lsptoolshost/integrationTests}/index.ts (89%) rename test/{ => lsptoolshost}/integrationTests/integrationHelpers.ts (97%) rename test/{ => lsptoolshost}/integrationTests/jest.config.ts (78%) rename test/{ => lsptoolshost}/integrationTests/lspInlayHints.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/onAutoInsert.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/references.integration.test.ts (100%) rename test/{ => lsptoolshost}/integrationTests/signatureHelp.integration.test.ts (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/NuGet.config (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/basicRazorApp21.ts (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/singleCsproj.ts (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnFilterWithCsproj.ts (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj.ts (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/.gitignore (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/slnWithCsproj/.runsettings (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/A.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/ISomeInterface.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/Program.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/app.csproj (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/completion.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/completionBase.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/definition.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/diagnostics.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/documentSymbols.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/implementation.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/inlayHints.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/remap.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/remapped.txt (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/secondaryDiagnostics.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/semantictokens.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/app/typeDefinition.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/lib/Class1.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj => test/lsptoolshost/integrationTests/testAssets/slnWithCsproj}/src/lib/lib.csproj (100%) rename {omnisharptest/omnisharpIntegrationTests => test/lsptoolshost/integrationTests}/testAssets/slnWithCsproj/test/UnitTest1.cs (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithCsproj/test/test.csproj (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/slnWithGenerator.ts (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/spawnGit.ts (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/testAssetWorkspace.ts (100%) rename test/{ => lsptoolshost}/integrationTests/testAssets/testAssets.ts (95%) rename test/{ => lsptoolshost}/integrationTests/unitTests.integration.test.ts (98%) rename test/{ => lsptoolshost}/integrationTests/workspaceDiagnostics.integration.test.ts (98%) rename test/{ => lsptoolshost}/unitTests/configurationMiddleware.test.ts (99%) rename test/{ => lsptoolshost}/unitTests/jest.config.ts (90%) rename test/{ => lsptoolshost}/unitTests/json.test.ts (99%) rename test/{ => lsptoolshost}/unitTests/languageServerConfigChangeObserver.test.ts (97%) rename test/{ => lsptoolshost}/unitTests/migrateOptions.test.ts (94%) rename test/{ => lsptoolshost}/unitTests/packageNlsJson.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/advisor.integration.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/codeActionRename.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/codeLensProvider.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/completionProvider.integration.test.ts (98%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/definitionProvider.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/diagnostics.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/documentSymbolProvider.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/documentationCommentAutoFormatting.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/dotnetTest.integration.test.ts (94%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/hoverProvider.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/implementationProvider.test.ts (94%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/index.ts (89%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/inlayHints.integration.test.ts (98%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/integrationHelpers.ts (94%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/jest.config.ts (74%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/languageMiddleware.integration.test.ts (99%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/launchConfiguration.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/launcher.test.ts (96%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts (92%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/poll.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/reAnalyze.integration.test.ts (95%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/referenceProvider.test.ts (94%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/semanticTokensProvider.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/signatureHelp.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/NuGet.config (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts (60%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts (91%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/.gitignore (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/A.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/DocComments.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/ISomeInterface.cs (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/SomeInterfaceImpl.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/completion.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/completionBase.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/definition.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/diagnostics.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/documentSymbols.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/hover.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/implementation.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/inlayHints.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/reference.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/remap.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/remapped.txt (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/secondaryDiagnostics.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/semantictokens.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/sigHelp.cs (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app => test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj}/typeDefinition.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/.gitignore (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFile.sln (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFilter.slnf (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/A.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/DocComments.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/ISomeInterface.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/Program.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/SomeInterfaceImpl.cs (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/app.csproj (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/completion.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/completionBase.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/definition.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/diagnostics.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/documentSymbols.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/hover.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/implementation.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/inlayHints.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/reference.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/remap.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/remapped.txt (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/secondaryDiagnostics.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/semantictokens.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/sigHelp.cs (100%) rename test/{integrationTests/testAssets/slnWithCsproj => omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/app/typeDefinition.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/lib/Class1.cs (100%) rename {omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj => test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj}/src/lib/lib.csproj (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/UnitTest1.cs (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/test.csproj (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.gitignore rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/.runsettings (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/A.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/src/app/Program.cs (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/app.csproj (100%) create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completion.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/definition.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/hover.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/implementation.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/reference.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remap.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remapped.txt create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs create mode 100644 test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/src/lib/Class1.cs (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/src/lib/lib.csproj (100%) rename test/{integrationTests => omnisharp/omnisharpIntegrationTests}/testAssets/slnWithCsproj/test/UnitTest1.cs (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/test.csproj (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/GeneratorTrigger.cs (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/app.csproj (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/MainGenerator.cs (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/generator.csproj (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/testAssets/slnWithGenerator/slnWithGenerator.sln (100%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/typeDefinitionProvider.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpIntegrationTests/workspaceSymbolProvider.integration.test.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/absolutePath.test.ts (88%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/assets.test.ts (99%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/common.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts (96%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/fakes/fakeDotnetResolver.ts (82%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/fakes/fakeMonoResolver.ts (82%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/features/reportIssue.test.ts (94%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/informationMessageObserver.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/installRuntimeDependencies.test.ts (89%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/jest.config.ts (90%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts (83%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/csharpChannelObserver.test.ts (88%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts (95%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts (81%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts (85%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts (87%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts (95%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/errorMessageObserver.test.ts (89%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts (94%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts (96%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts (96%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts (91%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/razorLoggerObserver.test.ts (87%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/telemetryObserver.test.ts (95%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/logging/warningMessageObserver.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts (93%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/omnisharpDownloader.test.ts (84%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/omnisharpManager.test.ts (91%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/omnisharpPackageCreator.test.ts (98%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/optionChangeObserver.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/optionStream.test.ts (93%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/options.test.ts (97%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts (90%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/packages/fileDownloader.test.ts (93%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/packages/isValidDownload.test.ts (89%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/packages/packageFilterer.test.ts (92%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/packages/zipInstaller.test.ts (86%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/platform.test.ts (98%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/processPicker.test.ts (99%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts (88%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/mockHttpsServer.ts (89%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/private.pem (100%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/public.pem (100%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/testAssets.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/testEventBus.ts (80%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/testFile.ts (100%) rename {omnisharptest => test/omnisharp}/omnisharpUnitTests/testAssets/testZip.ts (100%) rename {omnisharptest => test/omnisharp}/runFeatureTests.ts (100%) rename {omnisharptest => test/omnisharp}/testUtil.ts (100%) rename test/{ => razor}/razorIntegrationTests/formatting.integration.test.ts (97%) rename test/{ => razor}/razorIntegrationTests/hover.integration.test.ts (95%) rename {omnisharptest/omnisharpIntegrationTests => test/razor/razorIntegrationTests}/index.ts (88%) rename test/{ => razor}/razorIntegrationTests/jest.config.ts (75%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.sln (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/BadlyFormatted.razor (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/NuGet.config (100%) rename test/{ => razor}/razorIntegrationTests/testAssets/basicRazorApp21.ts (84%) rename test/{ => razor}/razorIntegrationTests/testAssets/testAssetWorkspace.ts (86%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/README.md (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/UpdateTextMate.ps1 (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/__snapshots__/grammarTests.test.ts.snap (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/addTagHelperDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/attributeDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeBlock.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/doStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/elsePart.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressionInAttribute.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressions.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/forStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/foreachStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/functionsDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/grammarTests.test.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/htmlDynamicAttribute.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/ifStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implementsDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressionInAttribute.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressions.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/ITokenizedContent.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/snapshotFactory.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/testUtilities.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts (86%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/inheritsDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/injectDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/layoutDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/lockStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/modelDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/namespaceDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/pageDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/preservewhitespaceDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorComment.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorTemplate.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/removeTagHelperDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/rendermodeDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/scriptBlock.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/sectionDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/styleBlock.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/switchStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tagHelperPrefixDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/transitions.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tryStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/typeparamDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingDirective.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingStatement.ts (100%) rename test/{ => razor}/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/whileStatement.ts (100%) rename test/{ => razor}/razorTests/jest.config.ts (94%) rename test/{integrationTests/jestSetup => }/vsCodeEnvironment.ts (100%) rename test/{integrationTests/jestSetup => }/vsCodeFramework.ts (100%) diff --git a/.config/guardian/.gdnbaselines b/.config/guardian/.gdnbaselines index 75f3a5cfe..1e773d750 100644 --- a/.config/guardian/.gdnbaselines +++ b/.config/guardian/.gdnbaselines @@ -14,7 +14,7 @@ "d6ffb0614846153cf3cc5936d0444ed9eda6fe6854febb4c8ea59243c120b223": { "signature": "d6ffb0614846153cf3cc5936d0444ed9eda6fe6854febb4c8ea59243c120b223", "alternativeSignatures": [], - "target": "omnisharptest/omnisharpUnitTests/testAssets/private.pem", + "target": "test/omnisharp/omnisharpUnitTests/testAssets/private.pem", "line": 1, "memberOf": [ "default" @@ -26,4 +26,4 @@ "justification": "This error is baselined with an expiration date of 180 days from 2024-06-27 21:44:58Z" } } -} \ No newline at end of file +} diff --git a/.vscode/launch.json b/.vscode/launch.json index ccc3ec8cb..0da4ba7af 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,9 +20,9 @@ // Create a temp profile that has no extensions / user settings. // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. "--profile-temp", - "${workspaceRoot}/test/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace", + "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", - "--extensionTestsPath=${workspaceRoot}/out/test/integrationTests" + "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" ], "env": { "CODE_EXTENSIONS_PATH": "${workspaceRoot}", @@ -43,9 +43,9 @@ // Create a temp profile that has no extensions / user settings. // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. "--profile-temp", - "${workspaceRoot}/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace", + "${workspaceRoot}/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", - "--extensionTestsPath=${workspaceRoot}/out/test/razorIntegrationTests" + "--extensionTestsPath=${workspaceRoot}/out/test/razor/razorIntegrationTests" ], "env": { "CODE_EXTENSIONS_PATH": "${workspaceRoot}", @@ -66,9 +66,9 @@ // Create a temp profile that has no extensions / user settings. // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. "--profile-temp", - "${workspaceRoot}/omnisharptest/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_${input:omnisharpAssetName}.code-workspace", + "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", - "--extensionTestsPath=${workspaceRoot}/out/omnisharptest/omnisharpIntegrationTests" + "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" ], "env": { "CODE_EXTENSIONS_PATH": "${workspaceRoot}", @@ -89,9 +89,9 @@ // Create a temp profile that has no extensions / user settings. // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. "--profile-temp", - "${workspaceRoot}/omnisharptest/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_lsp_${input:omnisharpAssetName}.code-workspace", + "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_lsp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", - "--extensionTestsPath=${workspaceRoot}/out/omnisharptest/omnisharpIntegrationTests" + "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" ], "env": { "CODE_EXTENSIONS_PATH": "${workspaceRoot}", diff --git a/.vscodeignore b/.vscodeignore index dacfc4c57..df595c2a1 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -18,7 +18,6 @@ server/** src/** tasks/** test/** -omnisharptest/** __mocks__/** jest.config.ts baseJestConfig.ts diff --git a/__mocks__/vscode.ts b/__mocks__/vscode.ts index e1aa79811..bdd05e7de 100644 --- a/__mocks__/vscode.ts +++ b/__mocks__/vscode.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscodeAdapter from '../src/vscodeAdapter'; -import { getFakeVsCode } from '../test/unitTests/fakes'; +import { getFakeVsCode } from '../test/fakes'; // This module creates a manual mock for the vscode module for running in unit tests. // Jest will automatically pick this up as it is in the __mocks__ directory next to node_modules. diff --git a/jest.config.ts b/jest.config.ts index 51a8bcdf5..cf4a2d1de 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -6,13 +6,13 @@ import type { Config } from 'jest'; const config: Config = { projects: [ - '/test/unitTests/jest.config.ts', - '/test/integrationTests/jest.config.ts', - '/test/razorIntegrationTests/jest.config.ts', - '/test/razorTests/jest.config.ts', - '/test/artifactTests/jest.config.ts', - '/omnisharptest/omnisharpUnitTests/jest.config.ts', - '/omnisharptest/omnisharpIntegrationTests/jest.config.ts', + '/test/lsptoolshost/artifactTests/jest.config.ts', + '/test/lsptoolshost/integrationTests/jest.config.ts', + '/test/lsptoolshost/unitTests/jest.config.ts', + '/test/omnisharp/omnisharpIntegrationTests/jest.config.ts', + '/test/omnisharp/omnisharpUnitTests/jest.config.ts', + '/test/razor/razorIntegrationTests/jest.config.ts', + '/test/razor/razorTests/jest.config.ts', ], // Reporters are a global jest configuration property and cannot be set in the project jest config. // This configuration will create a 'junit.xml' file in the output directory, no matter which test project is running. diff --git a/tasks/testTasks.ts b/tasks/testTasks.ts index a435fcc57..c84e53a1a 100644 --- a/tasks/testTasks.ts +++ b/tasks/testTasks.ts @@ -10,10 +10,10 @@ import { codeExtensionPath, rootPath, outPath } from './projectPaths'; import spawnNode from './spawnNode'; import * as jest from 'jest'; import { Config } from '@jest/types'; -import { jestOmniSharpUnitTestProjectName } from '../omnisharptest/omnisharpUnitTests/jest.config'; -import { jestUnitTestProjectName } from '../test/unitTests/jest.config'; -import { razorTestProjectName } from '../test/razorTests/jest.config'; -import { jestArtifactTestsProjectName } from '../test/artifactTests/jest.config'; +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'; gulp.task('test:razor', async () => { runJestTest(razorTestProjectName); @@ -22,7 +22,11 @@ gulp.task('test:razor', async () => { const razorIntegrationTestProjects = ['BasicRazorApp2_1']; for (const projectName of razorIntegrationTestProjects) { gulp.task(`test:razorintegration:${projectName}`, async () => - runIntegrationTest(projectName, 'razorIntegrationTests', `Razor Test Integration ${projectName}`) + runIntegrationTest( + projectName, + path.join('razor', 'razorIntegrationTests'), + `Razor Test Integration ${projectName}` + ) ); } @@ -76,7 +80,11 @@ gulp.task('test:unit', async () => { const integrationTestProjects = ['slnWithCsproj']; for (const projectName of integrationTestProjects) { gulp.task(`test:integration:${projectName}`, async () => - runIntegrationTest(projectName, 'integrationTests', `Test Integration ${projectName}`) + runIntegrationTest( + projectName, + path.join('lsptoolshost', 'integrationTests'), + `Test Integration ${projectName}` + ) ); } @@ -89,7 +97,7 @@ gulp.task('test', gulp.series('test:unit', 'test:integration', 'test:razor', 'te async function runOmnisharpJestIntegrationTest(testAssetName: string, engine: 'stdio' | 'lsp', suiteName: string) { const workspaceFile = `omnisharp${engine === 'lsp' ? '_lsp' : ''}_${testAssetName}.code-workspace`; - const testFolder = path.join('omnisharptest', 'omnisharpIntegrationTests'); + const testFolder = path.join('test', 'omnisharp', 'omnisharpIntegrationTests'); const env = { OSVC_SUITE: testAssetName, diff --git a/test/unitTests/fakes.ts b/test/fakes.ts similarity index 96% rename from test/unitTests/fakes.ts rename to test/fakes.ts index 4ab4313e4..7f2b0424e 100644 --- a/test/unitTests/fakes.ts +++ b/test/fakes.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from '../../src/vscodeAdapter'; -import * as protocol from '../../src/omnisharp/protocol'; -import { ITelemetryReporter } from '../../src/shared/telemetryReporter'; -import { MSBuildDiagnosticsMessage } from '../../src/omnisharp/protocol'; +import * as vscode from '../src/vscodeAdapter'; +import * as protocol from '../src/omnisharp/protocol'; +import { ITelemetryReporter } from '../src/shared/telemetryReporter'; +import { MSBuildDiagnosticsMessage } from '../src/omnisharp/protocol'; import { OmnisharpServerMsBuildProjectDiagnostics, OmnisharpServerOnError, OmnisharpServerUnresolvedDependencies, WorkspaceInformationUpdated, -} from '../../src/omnisharp/loggingEvents'; -import * as vscodeAdapter from '../../src/vscodeAdapter'; +} from '../src/omnisharp/loggingEvents'; +import * as vscodeAdapter from '../src/vscodeAdapter'; export const getNullChannel = (): vscode.OutputChannel => { const returnChannel: vscode.OutputChannel = { diff --git a/test/artifactTests/jest.config.ts b/test/lsptoolshost/artifactTests/jest.config.ts similarity index 93% rename from test/artifactTests/jest.config.ts rename to test/lsptoolshost/artifactTests/jest.config.ts index 08dc4fc58..5135e6134 100644 --- a/test/artifactTests/jest.config.ts +++ b/test/lsptoolshost/artifactTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const jestArtifactTestsProjectName = 'Artifact Tests'; diff --git a/test/artifactTests/vsix.test.ts b/test/lsptoolshost/artifactTests/vsix.test.ts similarity index 100% rename from test/artifactTests/vsix.test.ts rename to test/lsptoolshost/artifactTests/vsix.test.ts diff --git a/test/integrationTests/buildDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts similarity index 99% rename from test/integrationTests/buildDiagnostics.integration.test.ts rename to test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts index 191befe92..c94481110 100644 --- a/test/integrationTests/buildDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import { describe, test, expect, beforeAll, afterAll, beforeEach, afterEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; -import { AnalysisSetting, BuildDiagnosticsService } from '../../src/lsptoolshost/buildDiagnosticsService'; +import { AnalysisSetting, BuildDiagnosticsService } from '../../../src/lsptoolshost/buildDiagnosticsService'; import * as integrationHelpers from './integrationHelpers'; import path = require('path'); describe(`Build and live diagnostics dedupe ${testAssetWorkspace.description}`, () => { diff --git a/test/integrationTests/classification.integration.test.ts b/test/lsptoolshost/integrationTests/classification.integration.test.ts similarity index 100% rename from test/integrationTests/classification.integration.test.ts rename to test/lsptoolshost/integrationTests/classification.integration.test.ts diff --git a/test/integrationTests/codelens.integration.test.ts b/test/lsptoolshost/integrationTests/codelens.integration.test.ts similarity index 100% rename from test/integrationTests/codelens.integration.test.ts rename to test/lsptoolshost/integrationTests/codelens.integration.test.ts diff --git a/test/integrationTests/commandEnablement.integration.test.ts b/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts similarity index 100% rename from test/integrationTests/commandEnablement.integration.test.ts rename to test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts diff --git a/test/integrationTests/completion.integration.test.ts b/test/lsptoolshost/integrationTests/completion.integration.test.ts similarity index 100% rename from test/integrationTests/completion.integration.test.ts rename to test/lsptoolshost/integrationTests/completion.integration.test.ts diff --git a/test/integrationTests/diagnosticsHelpers.ts b/test/lsptoolshost/integrationTests/diagnosticsHelpers.ts similarity index 100% rename from test/integrationTests/diagnosticsHelpers.ts rename to test/lsptoolshost/integrationTests/diagnosticsHelpers.ts diff --git a/test/integrationTests/documentDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts similarity index 98% rename from test/integrationTests/documentDiagnostics.integration.test.ts rename to test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts index eb65025b6..502a8c553 100644 --- a/test/integrationTests/documentDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts @@ -6,7 +6,7 @@ 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 { AnalysisSetting } from '../../../src/lsptoolshost/buildDiagnosticsService'; import * as integrationHelpers from './integrationHelpers'; import path = require('path'); import { getCode, setBackgroundAnalysisScopes, waitForExpectedDiagnostics } from './diagnosticsHelpers'; diff --git a/test/integrationTests/documentSymbolProvider.integration.test.ts b/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts similarity index 100% rename from test/integrationTests/documentSymbolProvider.integration.test.ts rename to test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts diff --git a/test/integrationTests/expectedCommands.ts b/test/lsptoolshost/integrationTests/expectedCommands.ts similarity index 100% rename from test/integrationTests/expectedCommands.ts rename to test/lsptoolshost/integrationTests/expectedCommands.ts diff --git a/test/integrationTests/formatting.integration.test.ts b/test/lsptoolshost/integrationTests/formatting.integration.test.ts similarity index 100% rename from test/integrationTests/formatting.integration.test.ts rename to test/lsptoolshost/integrationTests/formatting.integration.test.ts diff --git a/test/integrationTests/formattingEditorConfig.integration.test.ts b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts similarity index 100% rename from test/integrationTests/formattingEditorConfig.integration.test.ts rename to test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts diff --git a/test/integrationTests/formattingTestHelpers.ts b/test/lsptoolshost/integrationTests/formattingTestHelpers.ts similarity index 100% rename from test/integrationTests/formattingTestHelpers.ts rename to test/lsptoolshost/integrationTests/formattingTestHelpers.ts diff --git a/test/integrationTests/gotoDefinition.integration.test.ts b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts similarity index 100% rename from test/integrationTests/gotoDefinition.integration.test.ts rename to test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts diff --git a/test/integrationTests/gotoImplementation.integration.test.ts b/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts similarity index 100% rename from test/integrationTests/gotoImplementation.integration.test.ts rename to test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts diff --git a/test/integrationTests/hover.integration.test.ts b/test/lsptoolshost/integrationTests/hover.integration.test.ts similarity index 100% rename from test/integrationTests/hover.integration.test.ts rename to test/lsptoolshost/integrationTests/hover.integration.test.ts diff --git a/test/razorIntegrationTests/index.ts b/test/lsptoolshost/integrationTests/index.ts similarity index 89% rename from test/razorIntegrationTests/index.ts rename to test/lsptoolshost/integrationTests/index.ts index 26731859a..ac2e6a90a 100644 --- a/test/razorIntegrationTests/index.ts +++ b/test/lsptoolshost/integrationTests/index.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { runIntegrationTests } from '../runIntegrationTests'; +import { runIntegrationTests } from '../../runIntegrationTests'; import { jestIntegrationTestProjectName } from './jest.config'; export async function run() { diff --git a/test/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts similarity index 97% rename from test/integrationTests/integrationHelpers.ts rename to test/lsptoolshost/integrationTests/integrationHelpers.ts index 5f3405e82..8096a8668 100644 --- a/test/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -5,9 +5,9 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import { CSharpExtensionExports } from '../../src/csharpExtensionExports'; +import { CSharpExtensionExports } from '../../../src/csharpExtensionExports'; import { existsSync } from 'fs'; -import { ServerState } from '../../src/lsptoolshost/serverStateChange'; +import { ServerState } from '../../../src/lsptoolshost/serverStateChange'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; export async function activateCSharpExtension(): Promise { diff --git a/test/integrationTests/jest.config.ts b/test/lsptoolshost/integrationTests/jest.config.ts similarity index 78% rename from test/integrationTests/jest.config.ts rename to test/lsptoolshost/integrationTests/jest.config.ts index 0d8e8b8ee..4865b32f2 100644 --- a/test/integrationTests/jest.config.ts +++ b/test/lsptoolshost/integrationTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const jestIntegrationTestProjectName = 'Integration Tests'; @@ -14,8 +14,8 @@ const integrationTestConfig: Config = { ...baseProjectConfig, displayName: jestIntegrationTestProjectName, roots: [''], - testEnvironment: '/jestSetup/vsCodeEnvironment.ts', - setupFilesAfterEnv: ['/jestSetup/vsCodeFramework.ts'], + testEnvironment: '/../../vsCodeEnvironment.ts', + setupFilesAfterEnv: ['/../../vsCodeFramework.ts'], }; export default integrationTestConfig; diff --git a/test/integrationTests/lspInlayHints.integration.test.ts b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts similarity index 100% rename from test/integrationTests/lspInlayHints.integration.test.ts rename to test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts diff --git a/test/integrationTests/onAutoInsert.integration.test.ts b/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts similarity index 100% rename from test/integrationTests/onAutoInsert.integration.test.ts rename to test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts diff --git a/test/integrationTests/references.integration.test.ts b/test/lsptoolshost/integrationTests/references.integration.test.ts similarity index 100% rename from test/integrationTests/references.integration.test.ts rename to test/lsptoolshost/integrationTests/references.integration.test.ts diff --git a/test/integrationTests/signatureHelp.integration.test.ts b/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts similarity index 100% rename from test/integrationTests/signatureHelp.integration.test.ts rename to test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/NuGet.config b/test/lsptoolshost/integrationTests/testAssets/NuGet.config similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/NuGet.config rename to test/lsptoolshost/integrationTests/testAssets/NuGet.config diff --git a/test/integrationTests/testAssets/basicRazorApp21.ts b/test/lsptoolshost/integrationTests/testAssets/basicRazorApp21.ts similarity index 100% rename from test/integrationTests/testAssets/basicRazorApp21.ts rename to test/lsptoolshost/integrationTests/testAssets/basicRazorApp21.ts diff --git a/test/integrationTests/testAssets/singleCsproj.ts b/test/lsptoolshost/integrationTests/testAssets/singleCsproj.ts similarity index 100% rename from test/integrationTests/testAssets/singleCsproj.ts rename to test/lsptoolshost/integrationTests/testAssets/singleCsproj.ts diff --git a/test/integrationTests/testAssets/slnFilterWithCsproj.ts b/test/lsptoolshost/integrationTests/testAssets/slnFilterWithCsproj.ts similarity index 100% rename from test/integrationTests/testAssets/slnFilterWithCsproj.ts rename to test/lsptoolshost/integrationTests/testAssets/slnFilterWithCsproj.ts diff --git a/test/integrationTests/testAssets/slnWithCsproj.ts b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj.ts similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj.ts rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj.ts diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.gitignore b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.gitignore similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.gitignore rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.gitignore diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.runsettings b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.runsettings similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.runsettings rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.runsettings diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/A.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/A.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/A.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/A.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/BaseClassImplementation.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/Formatting.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/ISomeInterface.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/ISomeInterface.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/Program.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/Program.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/Program.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/Program.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/app.csproj b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/app.csproj similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/app.csproj rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/app.csproj diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/completion.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/completion.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/completion.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/completion.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completionBase.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completionBase.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/definition.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/definition.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/definition.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/definition.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/diagnostics.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/diagnostics.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/documentSymbols.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/documentSymbols.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/.editorconfig diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/folderWithEditorConfig/FormattingWithEditorConfig.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/hover.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/implementation.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/implementation.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/implementation.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/implementation.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/inlayHints.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/inlayHints.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/reference.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remap.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/remap.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remap.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/remap.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remapped.txt b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/remapped.txt similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remapped.txt rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/remapped.txt diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/secondaryDiagnostics.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/secondaryDiagnostics.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/semantictokens.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/semantictokens.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/typeDefinition.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/typeDefinition.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/Class1.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/Class1.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/lib.csproj b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/lib.csproj rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/test/test.csproj b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/test.csproj similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/test/test.csproj rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/test.csproj diff --git a/test/integrationTests/testAssets/slnWithGenerator.ts b/test/lsptoolshost/integrationTests/testAssets/slnWithGenerator.ts similarity index 100% rename from test/integrationTests/testAssets/slnWithGenerator.ts rename to test/lsptoolshost/integrationTests/testAssets/slnWithGenerator.ts diff --git a/test/integrationTests/testAssets/spawnGit.ts b/test/lsptoolshost/integrationTests/testAssets/spawnGit.ts similarity index 100% rename from test/integrationTests/testAssets/spawnGit.ts rename to test/lsptoolshost/integrationTests/testAssets/spawnGit.ts diff --git a/test/integrationTests/testAssets/testAssetWorkspace.ts b/test/lsptoolshost/integrationTests/testAssets/testAssetWorkspace.ts similarity index 100% rename from test/integrationTests/testAssets/testAssetWorkspace.ts rename to test/lsptoolshost/integrationTests/testAssets/testAssetWorkspace.ts diff --git a/test/integrationTests/testAssets/testAssets.ts b/test/lsptoolshost/integrationTests/testAssets/testAssets.ts similarity index 95% rename from test/integrationTests/testAssets/testAssets.ts rename to test/lsptoolshost/integrationTests/testAssets/testAssets.ts index 5f385a078..965204fca 100644 --- a/test/integrationTests/testAssets/testAssets.ts +++ b/test/lsptoolshost/integrationTests/testAssets/testAssets.ts @@ -6,8 +6,8 @@ import * as fs from 'async-file'; import * as path from 'path'; import * as vscode from 'vscode'; -import spawnGit from '../../../test/integrationTests/testAssets/spawnGit'; -import { execChildProcess } from '../../../src/common'; +import spawnGit from './spawnGit'; +import { execChildProcess } from '../../../../src/common'; export class TestAssetProject { constructor(project: ITestAssetProject) { diff --git a/test/integrationTests/unitTests.integration.test.ts b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts similarity index 98% rename from test/integrationTests/unitTests.integration.test.ts rename to test/lsptoolshost/integrationTests/unitTests.integration.test.ts index a7bfda189..11e9fcd48 100644 --- a/test/integrationTests/unitTests.integration.test.ts +++ b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts @@ -13,7 +13,7 @@ import { getCodeLensesAsync, openFileInWorkspaceAsync, } from './integrationHelpers'; -import { TestProgress } from '../../src/lsptoolshost/roslynProtocol'; +import { TestProgress } from '../../../src/lsptoolshost/roslynProtocol'; describe(`[${testAssetWorkspace.description}] Test Unit Testing`, () => { beforeAll(async () => { diff --git a/test/integrationTests/workspaceDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts similarity index 98% rename from test/integrationTests/workspaceDiagnostics.integration.test.ts rename to test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts index 366be46d3..47803daa4 100644 --- a/test/integrationTests/workspaceDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts @@ -6,7 +6,7 @@ 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 { AnalysisSetting } from '../../../src/lsptoolshost/buildDiagnosticsService'; import * as integrationHelpers from './integrationHelpers'; import { getCode, setBackgroundAnalysisScopes, waitForExpectedDiagnostics } from './diagnosticsHelpers'; describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { diff --git a/test/unitTests/configurationMiddleware.test.ts b/test/lsptoolshost/unitTests/configurationMiddleware.test.ts similarity index 99% rename from test/unitTests/configurationMiddleware.test.ts rename to test/lsptoolshost/unitTests/configurationMiddleware.test.ts index 5c2be26cd..587a863b7 100644 --- a/test/unitTests/configurationMiddleware.test.ts +++ b/test/lsptoolshost/unitTests/configurationMiddleware.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { readFileSync } from 'fs'; -import { convertServerOptionNameToClientConfigurationName } from '../../src/lsptoolshost/optionNameConverter'; +import { convertServerOptionNameToClientConfigurationName } from '../../../src/lsptoolshost/optionNameConverter'; import { describe, test, expect } from '@jest/globals'; const editorBehaviorSection = 1; diff --git a/test/unitTests/jest.config.ts b/test/lsptoolshost/unitTests/jest.config.ts similarity index 90% rename from test/unitTests/jest.config.ts rename to test/lsptoolshost/unitTests/jest.config.ts index 5c180704d..01db2c61b 100644 --- a/test/unitTests/jest.config.ts +++ b/test/lsptoolshost/unitTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const jestUnitTestProjectName = 'Unit Tests'; @@ -19,7 +19,7 @@ const unitTestConfig: Config = { // Specify jest to only run tests in jest folders. // We also have to include the __mocks__ folder. That folder must be next to node_modules so we can't move it, // but if we specify roots, jest won't automatically pick it up. So we have to specify it here. - roots: ['', '../../__mocks__'], + roots: ['', '../../../__mocks__'], }; export default unitTestConfig; diff --git a/test/unitTests/json.test.ts b/test/lsptoolshost/unitTests/json.test.ts similarity index 99% rename from test/unitTests/json.test.ts rename to test/lsptoolshost/unitTests/json.test.ts index 6a55dcd55..d0a4acf4f 100644 --- a/test/unitTests/json.test.ts +++ b/test/lsptoolshost/unitTests/json.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { tolerantParse } from '../../src/json'; +import { tolerantParse } from '../../../src/json'; import { describe, test, expect } from '@jest/globals'; describe('JSON', () => { diff --git a/test/unitTests/languageServerConfigChangeObserver.test.ts b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts similarity index 97% rename from test/unitTests/languageServerConfigChangeObserver.test.ts rename to test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts index d16b53ac1..31eec3a06 100644 --- a/test/unitTests/languageServerConfigChangeObserver.test.ts +++ b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts @@ -5,11 +5,11 @@ import { timeout } from 'rxjs/operators'; import { from as observableFrom, Subject, BehaviorSubject } from 'rxjs'; -import { registerLanguageServerOptionChanges } from '../../src/lsptoolshost/optionChanges'; +import { registerLanguageServerOptionChanges } from '../../../src/lsptoolshost/optionChanges'; import { describe, beforeEach, test, expect } from '@jest/globals'; import * as vscode from 'vscode'; -import { getVSCodeWithConfig, updateConfig } from './fakes'; +import { getVSCodeWithConfig, updateConfig } from '../../fakes'; describe('Option changes observer', () => { let doClickOk: () => void; diff --git a/test/unitTests/migrateOptions.test.ts b/test/lsptoolshost/unitTests/migrateOptions.test.ts similarity index 94% rename from test/unitTests/migrateOptions.test.ts rename to test/lsptoolshost/unitTests/migrateOptions.test.ts index 916bf8aa9..1f2f8cfec 100644 --- a/test/unitTests/migrateOptions.test.ts +++ b/test/lsptoolshost/unitTests/migrateOptions.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { readFileSync } from 'fs'; -import { migrateOptions } from '../../src/shared/migrateOptions'; +import { migrateOptions } from '../../../src/shared/migrateOptions'; import { describe, test, expect } from '@jest/globals'; describe('Migrate configuration should in package.json', () => { diff --git a/test/unitTests/packageNlsJson.test.ts b/test/lsptoolshost/unitTests/packageNlsJson.test.ts similarity index 100% rename from test/unitTests/packageNlsJson.test.ts rename to test/lsptoolshost/unitTests/packageNlsJson.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/advisor.integration.test.ts similarity index 97% rename from omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/advisor.integration.test.ts index b82f5ff0a..86bebe051 100644 --- a/omnisharptest/omnisharpIntegrationTests/advisor.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/advisor.integration.test.ts @@ -9,7 +9,7 @@ import * as vscode from 'vscode'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; -import { Advisor } from '../../src/omnisharp/features/diagnosticsProvider'; +import { Advisor } from '../../../src/omnisharp/features/diagnosticsProvider'; function setLimit(to: number | null) { const csharpConfig = vscode.workspace.getConfiguration('csharp'); diff --git a/omnisharptest/omnisharpIntegrationTests/codeActionRename.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/codeActionRename.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/codeActionRename.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/codeActionRename.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/codeLensProvider.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/codeLensProvider.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/codeLensProvider.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/codeLensProvider.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/completionProvider.integration.test.ts similarity index 98% rename from omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/completionProvider.integration.test.ts index db58978c9..349f47d52 100644 --- a/omnisharptest/omnisharpIntegrationTests/completionProvider.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/completionProvider.integration.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { expect, test, beforeAll, afterAll } from '@jest/globals'; -import OmniSharpCompletionProvider from '../../src/omnisharp/features/completionProvider'; +import OmniSharpCompletionProvider from '../../../src/omnisharp/features/completionProvider'; import * as vscode from 'vscode'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import * as path from 'path'; diff --git a/omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/definitionProvider.test.ts similarity index 97% rename from omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts rename to test/omnisharp/omnisharpIntegrationTests/definitionProvider.test.ts index bb813c9ce..c647fa85d 100644 --- a/omnisharptest/omnisharpIntegrationTests/definitionProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/definitionProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpDefinitionProvider from '../../src/omnisharp/features/definitionProvider'; +import OmniSharpDefinitionProvider from '../../../src/omnisharp/features/definitionProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator, restartOmniSharpServer } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpIntegrationTests/diagnostics.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/diagnostics.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/diagnostics.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/diagnostics.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/documentSymbolProvider.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/documentSymbolProvider.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/documentSymbolProvider.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/documentSymbolProvider.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/documentationCommentAutoFormatting.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/documentationCommentAutoFormatting.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/documentationCommentAutoFormatting.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/documentationCommentAutoFormatting.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/dotnetTest.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts similarity index 94% rename from omnisharptest/omnisharpIntegrationTests/dotnetTest.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts index f62311166..f4403473b 100644 --- a/omnisharptest/omnisharpIntegrationTests/dotnetTest.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts @@ -8,10 +8,10 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { activateCSharpExtension, describeIfSlnWithCsProj } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; -import { EventStream } from '../../src/eventStream'; -import { EventType } from '../../src/omnisharp/eventType'; -import { OmnisharpRequestMessage } from '../../src/omnisharp/loggingEvents'; -import { V2 } from '../../src/omnisharp/protocol'; +import { EventStream } from '../../../src/eventStream'; +import { EventType } from '../../../src/omnisharp/eventType'; +import { OmnisharpRequestMessage } from '../../../src/omnisharp/loggingEvents'; +import { V2 } from '../../../src/omnisharp/protocol'; import { isNotNull } from '../testUtil'; // These tests only run on the slnWithCsproj solution diff --git a/omnisharptest/omnisharpIntegrationTests/hoverProvider.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/hoverProvider.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/hoverProvider.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/hoverProvider.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/implementationProvider.test.ts similarity index 94% rename from omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts rename to test/omnisharp/omnisharpIntegrationTests/implementationProvider.test.ts index 0c2e3cb87..bcb39a937 100644 --- a/omnisharptest/omnisharpIntegrationTests/implementationProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/implementationProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpImplementationProvider from '../../src/omnisharp/features/implementationProvider'; +import OmniSharpImplementationProvider from '../../../src/omnisharp/features/implementationProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; diff --git a/test/integrationTests/index.ts b/test/omnisharp/omnisharpIntegrationTests/index.ts similarity index 89% rename from test/integrationTests/index.ts rename to test/omnisharp/omnisharpIntegrationTests/index.ts index 26731859a..ac2e6a90a 100644 --- a/test/integrationTests/index.ts +++ b/test/omnisharp/omnisharpIntegrationTests/index.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { runIntegrationTests } from '../runIntegrationTests'; +import { runIntegrationTests } from '../../runIntegrationTests'; import { jestIntegrationTestProjectName } from './jest.config'; export async function run() { diff --git a/omnisharptest/omnisharpIntegrationTests/inlayHints.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/inlayHints.integration.test.ts similarity index 98% rename from omnisharptest/omnisharpIntegrationTests/inlayHints.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/inlayHints.integration.test.ts index 15086c972..a0e68b4ff 100644 --- a/omnisharptest/omnisharpIntegrationTests/inlayHints.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/inlayHints.integration.test.ts @@ -8,7 +8,7 @@ import * as vscode from 'vscode'; import { activateCSharpExtension, describeIfNotRazorOrGenerator, restartOmniSharpServer } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import * as path from 'path'; -import { InlayHint, LinePositionSpanTextChange } from '../../src/omnisharp/protocol'; +import { InlayHint, LinePositionSpanTextChange } from '../../../src/omnisharp/protocol'; import { isNotNull } from '../testUtil'; describeIfNotRazorOrGenerator(`Inlay Hints ${testAssetWorkspace.description}`, function () { diff --git a/omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts similarity index 94% rename from omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts rename to test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 01d350009..6d9290598 100644 --- a/omnisharptest/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -5,10 +5,10 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import { Advisor } from '../../src/omnisharp/features/diagnosticsProvider'; -import { EventStream } from '../../src/eventStream'; -import { EventType } from '../../src/omnisharp/eventType'; -import { OmnisharpExtensionExports } from '../../src/csharpExtensionExports'; +import { Advisor } from '../../../src/omnisharp/features/diagnosticsProvider'; +import { EventStream } from '../../../src/eventStream'; +import { EventType } from '../../../src/omnisharp/eventType'; +import { OmnisharpExtensionExports } from '../../../src/csharpExtensionExports'; import { describe } from '@jest/globals'; export interface ActivationResult { diff --git a/omnisharptest/omnisharpIntegrationTests/jest.config.ts b/test/omnisharp/omnisharpIntegrationTests/jest.config.ts similarity index 74% rename from omnisharptest/omnisharpIntegrationTests/jest.config.ts rename to test/omnisharp/omnisharpIntegrationTests/jest.config.ts index 4143879ed..0845965cd 100644 --- a/omnisharptest/omnisharpIntegrationTests/jest.config.ts +++ b/test/omnisharp/omnisharpIntegrationTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const jestIntegrationTestProjectName = 'OmniSharp Integration Tests'; @@ -14,8 +14,8 @@ const integrationTestConfig: Config = { ...baseProjectConfig, displayName: jestIntegrationTestProjectName, roots: [''], - testEnvironment: '/../../test/integrationTests/jestSetup/vsCodeEnvironment.ts', - setupFilesAfterEnv: ['/../../test/integrationTests/jestSetup/vsCodeFramework.ts'], + testEnvironment: '/../../vsCodeEnvironment.ts', + setupFilesAfterEnv: ['/../../vsCodeFramework.ts'], }; export default integrationTestConfig; diff --git a/omnisharptest/omnisharpIntegrationTests/languageMiddleware.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/languageMiddleware.integration.test.ts similarity index 99% rename from omnisharptest/omnisharpIntegrationTests/languageMiddleware.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/languageMiddleware.integration.test.ts index 5d1bdfed3..b802e7b4f 100644 --- a/omnisharptest/omnisharpIntegrationTests/languageMiddleware.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/languageMiddleware.integration.test.ts @@ -8,7 +8,7 @@ import * as vscode from 'vscode'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; -import { LanguageMiddleware, LanguageMiddlewareFeature } from '../../src/omnisharp/languageMiddlewareFeature'; +import { LanguageMiddleware, LanguageMiddlewareFeature } from '../../../src/omnisharp/languageMiddlewareFeature'; describeIfNotRazorOrGenerator(`${LanguageMiddlewareFeature.name}: ${testAssetWorkspace.description}`, () => { let fileUri: vscode.Uri; diff --git a/omnisharptest/omnisharpIntegrationTests/launchConfiguration.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/launchConfiguration.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/launcher.test.ts b/test/omnisharp/omnisharpIntegrationTests/launcher.test.ts similarity index 96% rename from omnisharptest/omnisharpIntegrationTests/launcher.test.ts rename to test/omnisharp/omnisharpIntegrationTests/launcher.test.ts index 3eff18224..72ee28e51 100644 --- a/omnisharptest/omnisharpIntegrationTests/launcher.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/launcher.test.ts @@ -10,8 +10,8 @@ import { resourcesToLaunchTargets, vsls, vslsTarget, -} from '../../src/omnisharp/launcher'; -import { LaunchTargetKind } from '../../src/shared/launchTarget'; +} from '../../../src/omnisharp/launcher'; +import { LaunchTargetKind } from '../../../src/shared/launchTarget'; describe(`launcher:`, () => { const workspaceFolders: vscode.WorkspaceFolder[] = [{ uri: vscode.Uri.parse('/'), name: 'root', index: 0 }]; diff --git a/omnisharptest/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts similarity index 92% rename from omnisharptest/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts index 9423560ad..efad59c9a 100644 --- a/omnisharptest/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/omnisharpCommands.integration.test.ts @@ -7,7 +7,11 @@ import { expect, test, beforeAll, afterAll, describe } from '@jest/globals'; import * as vscode from 'vscode'; import { activateCSharpExtension } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; -import { CommonCommands, OmniSharpCommands, RoslynCommands } from '../../test/integrationTests/expectedCommands'; +import { + CommonCommands, + OmniSharpCommands, + RoslynCommands, +} from '../../lsptoolshost/integrationTests/expectedCommands'; describe(`Command Enablement: ${testAssetWorkspace.description}`, function () { beforeAll(async function () { diff --git a/omnisharptest/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts b/test/omnisharp/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts similarity index 97% rename from omnisharptest/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts rename to test/omnisharp/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts index 5502acf29..22c7e749e 100644 --- a/omnisharptest/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/parsedEnvironmentFile.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { ParsedEnvironmentFile } from '../../src/coreclrDebug/parsedEnvironmentFile'; +import { ParsedEnvironmentFile } from '../../../src/coreclrDebug/parsedEnvironmentFile'; describe('ParsedEnvironmentFile', () => { test('Add single variable', () => { diff --git a/omnisharptest/omnisharpIntegrationTests/poll.ts b/test/omnisharp/omnisharpIntegrationTests/poll.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/poll.ts rename to test/omnisharp/omnisharpIntegrationTests/poll.ts diff --git a/omnisharptest/omnisharpIntegrationTests/reAnalyze.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts similarity index 95% rename from omnisharptest/omnisharpIntegrationTests/reAnalyze.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts index 32753a3fd..d5a69c014 100644 --- a/omnisharptest/omnisharpIntegrationTests/reAnalyze.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts @@ -9,10 +9,10 @@ import * as path from 'path'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { poll, assertWithPoll } from './poll'; -import { EventStream } from '../../src/eventStream'; -import { EventType } from '../../src/omnisharp/eventType'; -import { BaseEvent, OmnisharpBackgroundDiagnosticStatus } from '../../src/omnisharp/loggingEvents'; -import { BackgroundDiagnosticStatus } from '../../src/omnisharp/protocol'; +import { EventStream } from '../../../src/eventStream'; +import { EventType } from '../../../src/omnisharp/eventType'; +import { BaseEvent, OmnisharpBackgroundDiagnosticStatus } from '../../../src/omnisharp/loggingEvents'; +import { BackgroundDiagnosticStatus } from '../../../src/omnisharp/protocol'; function listenEvents(stream: EventStream, type: EventType): T[] { const results: T[] = []; diff --git a/omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/referenceProvider.test.ts similarity index 94% rename from omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts rename to test/omnisharp/omnisharpIntegrationTests/referenceProvider.test.ts index 29e971b73..4d7605190 100644 --- a/omnisharptest/omnisharpIntegrationTests/referenceProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/referenceProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpReferenceProvider from '../../src/omnisharp/features/referenceProvider'; +import OmniSharpReferenceProvider from '../../../src/omnisharp/features/referenceProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpIntegrationTests/semanticTokensProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/semanticTokensProvider.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/semanticTokensProvider.test.ts rename to test/omnisharp/omnisharpIntegrationTests/semanticTokensProvider.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/signatureHelp.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/signatureHelp.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/signatureHelp.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/signatureHelp.integration.test.ts diff --git a/omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts similarity index 97% rename from omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts rename to test/omnisharp/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts index 3d32def22..3edbc9f4f 100644 --- a/omnisharptest/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/sourceGeneratorDefinitionProvider.test.ts @@ -6,7 +6,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; import * as path from 'path'; -import OmniSharpDefinitionProvider from '../../src/omnisharp/features/definitionProvider'; +import OmniSharpDefinitionProvider from '../../../src/omnisharp/features/definitionProvider'; import { activateCSharpExtension, describeIfGenerator, restartOmniSharpServer } from './integrationHelpers'; import { assertWithPoll, sleep } from './poll'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace diff --git a/omnisharptest/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 similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml rename to test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml diff --git a/test/integrationTests/testAssets/NuGet.config b/test/omnisharp/omnisharpIntegrationTests/testAssets/NuGet.config similarity index 100% rename from test/integrationTests/testAssets/NuGet.config rename to test/omnisharp/omnisharpIntegrationTests/testAssets/NuGet.config diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts b/test/omnisharp/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts similarity index 60% rename from omnisharptest/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts rename to test/omnisharp/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts index 2bf613dc0..4dc262b29 100644 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/activeTestAssetWorkspace.ts @@ -6,13 +6,13 @@ import * as path from 'path'; import * as vscode from 'vscode'; -import { ITestAssetWorkspace } from '../../../test/integrationTests/testAssets/testAssets'; +import { ITestAssetWorkspace } from '../../../lsptoolshost/integrationTests/testAssets/testAssets'; -import singleCsproj from '../../../test/integrationTests/testAssets/singleCsproj'; -import slnWithCsproj from '../../../test/integrationTests/testAssets/slnWithCsproj'; -import slnFilterWithCsproj from '../../../test/integrationTests/testAssets/slnFilterWithCsproj'; -import BasicRazorApp2_1 from '../../../test/integrationTests/testAssets/basicRazorApp21'; -import slnWithGenerator from '../../../test/integrationTests/testAssets/slnWithGenerator'; +import singleCsproj from '../../../lsptoolshost/integrationTests/testAssets/singleCsproj'; +import slnWithCsproj from '../../../lsptoolshost/integrationTests/testAssets/slnWithCsproj'; +import slnFilterWithCsproj from '../../../lsptoolshost/integrationTests/testAssets/slnFilterWithCsproj'; +import BasicRazorApp2_1 from '../../../lsptoolshost/integrationTests/testAssets/basicRazorApp21'; +import slnWithGenerator from '../../../lsptoolshost/integrationTests/testAssets/slnWithGenerator'; import { OmnisharpTestAssetWorkspace } from './omnisharpTestAssetWorkspace'; const testAssetWorkspaces: { [x: string]: ITestAssetWorkspace } = { diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts b/test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts similarity index 91% rename from omnisharptest/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts rename to test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts index a41fe54bf..4d59aae62 100644 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { EventStream } from '../../../src/eventStream'; -import { EventType } from '../../../src/omnisharp/eventType'; -import { BaseEvent } from '../../../src/omnisharp/loggingEvents'; +import { EventStream } from '../../../../src/eventStream'; +import { EventType } from '../../../../src/omnisharp/eventType'; +import { BaseEvent } from '../../../../src/omnisharp/loggingEvents'; import { poll } from '../poll'; -import { ITestAssetWorkspace, TestAssetWorkspace } from '../../../test/integrationTests/testAssets/testAssets'; +import { ITestAssetWorkspace, TestAssetWorkspace } from '../../../lsptoolshost/integrationTests/testAssets/testAssets'; import { ActivationResult } from '../integrationHelpers'; export class OmnisharpTestAssetWorkspace extends TestAssetWorkspace { diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.gitignore b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.gitignore similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/.gitignore rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.gitignore 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 new file mode 100644 index 000000000..d2bbe1696 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "omnisharp.path": "latest", + "omnisharp.enableRoslynAnalyzers": true, + "omnisharp.enableLspDriver": true, + "dotnet.server.useOmnisharp": 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 new file mode 100644 index 000000000..8bce15410 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "omnisharp.path": "latest", + "omnisharp.enableRoslynAnalyzers": true, + "omnisharp.enableLspDriver": false, + "dotnet.server.useOmnisharp": true + } +} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/A.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/A.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/A.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/A.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/DocComments.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/DocComments.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/DocComments.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/DocComments.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/ISomeInterface.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/ISomeInterface.cs diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs new file mode 100644 index 000000000..f85e90a38 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace singleCsproj +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/SomeInterfaceImpl.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/SomeInterfaceImpl.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/SomeInterfaceImpl.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/SomeInterfaceImpl.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completion.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/completion.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completion.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/completion.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/completionBase.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/completionBase.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/definition.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/definition.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/definition.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/definition.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/diagnostics.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/diagnostics.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/documentSymbols.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/documentSymbols.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/hover.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/hover.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/hover.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/hover.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/implementation.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/implementation.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/implementation.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/implementation.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/inlayHints.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/inlayHints.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/reference.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/reference.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/reference.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/reference.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remap.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/remap.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remap.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/remap.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remapped.txt b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/remapped.txt similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remapped.txt rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/remapped.txt diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/secondaryDiagnostics.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/secondaryDiagnostics.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/semantictokens.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/semantictokens.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/sigHelp.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/sigHelp.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/sigHelp.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/sigHelp.cs diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj new file mode 100644 index 000000000..c73e0d169 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp3.1 + + + diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/typeDefinition.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/typeDefinition.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/.gitignore b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.gitignore similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/.gitignore rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.gitignore diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFile.sln b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFile.sln similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFile.sln rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFile.sln diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFilter.slnf b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFilter.slnf similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFilter.slnf rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/SolutionFilter.slnf diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/A.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/A.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/A.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/A.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/DocComments.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/DocComments.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/ISomeInterface.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/ISomeInterface.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/Program.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/Program.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/Program.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/Program.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/SomeInterfaceImpl.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/SomeInterfaceImpl.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/app.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/app.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/app.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/app.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completion.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completion.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completion.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completion.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completionBase.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/completionBase.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/definition.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/definition.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/definition.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/definition.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/diagnostics.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/diagnostics.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/documentSymbols.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/documentSymbols.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/hover.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/hover.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/hover.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/hover.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/implementation.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/implementation.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/implementation.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/implementation.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/inlayHints.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/inlayHints.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/reference.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/reference.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/reference.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/reference.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/remap.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remap.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/remap.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remap.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/remapped.txt b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remapped.txt similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/remapped.txt rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/remapped.txt diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/secondaryDiagnostics.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/secondaryDiagnostics.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/semantictokens.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/semantictokens.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/sigHelp.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/sigHelp.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/typeDefinition.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/app/typeDefinition.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/Class1.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/Class1.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/lib.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/src/lib/lib.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/UnitTest1.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/UnitTest1.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/UnitTest1.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/UnitTest1.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/test.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/test.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/test.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/test/test.csproj diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.gitignore b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.gitignore new file mode 100644 index 000000000..3d2ce4e89 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.gitignore @@ -0,0 +1,2 @@ +**/obj/ +**/bin/ \ No newline at end of file diff --git a/test/integrationTests/testAssets/slnWithCsproj/.runsettings b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.runsettings similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/.runsettings rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.runsettings diff --git a/test/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace diff --git a/test/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace diff --git a/test/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace diff --git a/test/integrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/b_SecondInOrder_SlnFile.sln diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/A.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/A.cs new file mode 100644 index 000000000..f9822136b --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/A.cs @@ -0,0 +1 @@ +class C {} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs new file mode 100644 index 000000000..fc321b3c4 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/DocComments.cs @@ -0,0 +1,13 @@ +class DocComments +{ + /// + string M(int param1, string param2) + { + return null; + } + + /// + + /// + void M2() {} +} diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs new file mode 100644 index 000000000..4c2da47f4 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/ISomeInterface.cs @@ -0,0 +1,6 @@ +namespace ReAnalyze +{ + public interface ISomeInterface + { + } +} \ No newline at end of file diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/app/Program.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/Program.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/app/Program.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/Program.cs diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs new file mode 100644 index 000000000..ce6b9fa31 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/SomeInterfaceImpl.cs @@ -0,0 +1,6 @@ +namespace ReAnalyze +{ + public class SomeInterfaceImpl: ISomeInterface + { + } +} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/app.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/app.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/app.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/app.csproj diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completion.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completion.cs new file mode 100644 index 000000000..ef6fcad72 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completion.cs @@ -0,0 +1,14 @@ +using System; + +namespace singleCsproj +{ + class Completion : CompletionBase + { + static void shouldHaveCompletions(string[] args) + { + Completion a = new Completion(); + } + + // override // Trailing space is intentional + } +} diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs new file mode 100644 index 000000000..c949da134 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/completionBase.cs @@ -0,0 +1,14 @@ +using singleCsproj2; + +namespace singleCsproj +{ + class CompletionBase + { + public virtual void Method(NeedsImport n) {} + } +} + +namespace singleCsproj2 +{ + class NeedsImport {} +} diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/definition.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/definition.cs new file mode 100644 index 000000000..eac709c0c --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/definition.cs @@ -0,0 +1,16 @@ +using System; + +namespace Test +{ + public partial class Definition + { + public static string Foo { get; set; } + + public void MyMethod() + { + Console.WriteLine(Foo); + } + } + + public partial class Definition { } +} diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs new file mode 100644 index 000000000..3f932c92e --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/diagnostics.cs @@ -0,0 +1,12 @@ +using System.IO; + +namespace Foo +{ + public class FooBar + { + public void FooBarBar() + { + var notUsed = 3; + } + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs new file mode 100644 index 000000000..74a5c3f09 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/documentSymbols.cs @@ -0,0 +1,57 @@ +using System; + +namespace Test +{ + class C + { + private int _f; + private int _f1, _f2; + + public C() {} + ~C() { } + + public void M1(int i, string s, params object[] args) + { + } + + public int P1 => 42; + public int P2 { get => 42; } + public int P3 { get { return 42; } } + + public int this[int index] => index++; + + public event EventHandler E1; + public event EventHandler E2, E3; + public event EventHandler E4 + { + add { } + remove { } + } + + public static bool operator ==(C c1, int i) { return true; } + + public static bool operator !=(C c1, int i) { return false; } + + public static implicit operator C(int i) { return null; } + + public static explicit operator int(C c1) { return 42 ; } + } + + struct S + { + } + + interface I + { + void M(); + } + + delegate void D(); + + enum E + { + One, + Two, + Three + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/hover.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/hover.cs new file mode 100644 index 000000000..cbfc3d9d3 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/hover.cs @@ -0,0 +1,16 @@ +using System; +namespace Test +{ + class testissue + { + ///Checks if object is tagged with the tag. + /// The game object. + /// Name of the tag. + /// Returns true if object is tagged with tag. + + public static bool Compare(int gameObject,string tagName) + { + return true; + } + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/implementation.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/implementation.cs new file mode 100644 index 000000000..abddb3511 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/implementation.cs @@ -0,0 +1,7 @@ +using System; + +namespace minimal +{ + public class BaseClass {} + public class SomeClass : BaseClass {} +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs new file mode 100644 index 000000000..c34ad62dc --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/inlayHints.cs @@ -0,0 +1,29 @@ +using System; + +class InlayHints +{ + public void M() + { + var l1 = new InlayHints(); + InlayHints l2 = new(); + Action a = (s) => { }; + _ = this[1]; + _ = M1(1); + _ = new InlayHints(1); + _ = M2(1, 2); // No hint here, suppressForParametersThatDifferOnlyBySuffix + + int param1 = 1; + _ = M1(param1); // No hint here, suppressForParametersThatMatchArgumentName + + _ = EnableM(true); // No hint here, suppressForParametersThatMatchMethodIntent + } + + public void M1(int param1) { } + public void M2(int param1, int param2) { } + public void EnableM(bool enable) { } + + public int this[int i] { get { return 0; } set { } } + + public InlayHints() {} + public InlayHints(int param1) {} +} diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/reference.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/reference.cs new file mode 100644 index 000000000..92737c378 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/reference.cs @@ -0,0 +1,17 @@ +using System; + +namespace minimal +{ + public class Foo + { + public void Baz() {} + } + + public class Bar + { + public Bar() + { + new Foo().Baz(); + } + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remap.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remap.cs new file mode 100644 index 000000000..b98e0f136 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remap.cs @@ -0,0 +1,12 @@ +namespace Remap +{ + public class Foo + { + public static string Bar { get; set; } + + public void Baz() + { + var x = nameof(Bar); + } + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remapped.txt b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remapped.txt new file mode 100644 index 000000000..5e1c309da --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/remapped.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs new file mode 100644 index 000000000..1a866d573 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/secondaryDiagnostics.cs @@ -0,0 +1,12 @@ +using System.IO; + +namespace Foo +{ + public class SecondaryDiagnostics + { + public void FooBarBar() + { + var notUsed = 3; + } + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs new file mode 100644 index 000000000..055b674b5 --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/semantictokens.cs @@ -0,0 +1,11 @@ +namespace Test +{ + public class TestProgram + { + public static int TestMain(string[] args) + { + System.Console.WriteLine(string.Join(',', args)); + return 0; + } + } +} diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs new file mode 100644 index 000000000..811e90f8c --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/sigHelp.cs @@ -0,0 +1,23 @@ +using System; +namespace Test +{ + class sigHelp + { + ///DoWork is some method. + /// Used to indicate status. + /// Used to specify context. + public static void DoWork(int Int1, float Float1, double Double1) + { + } + + public static void noDocMethod() + { + } + + public static void main() + { + DoWork(4, 4.0f, 5.0); + noDocMethod(); + } + } +} \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs new file mode 100644 index 000000000..addee4fde --- /dev/null +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/app/typeDefinition.cs @@ -0,0 +1,24 @@ + +using System; + +namespace Test +{ + public class LinkedList + { + public void MyMethod() + { + var linked = new LinkedList(); + var str = "test string"; + var part = new PartialClass(); + Console.WriteLine(str); + } + } + + public partial class PartialClass { + public string Foo {get; set;}; + } + + public partial class PartialClass { + public int Bar {get; set;} + } +} diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/Class1.cs diff --git a/test/integrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/src/lib/lib.csproj diff --git a/test/integrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs similarity index 100% rename from test/integrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/UnitTest1.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/test.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/test.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/test.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/test/test.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/GeneratorTrigger.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/GeneratorTrigger.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/GeneratorTrigger.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/GeneratorTrigger.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/app.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/app.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/app.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/app/app.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/MainGenerator.cs b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/MainGenerator.cs similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/MainGenerator.cs rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/MainGenerator.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/generator.csproj b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/generator.csproj similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/generator.csproj rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/generator/generator.csproj diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/slnWithGenerator.sln b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/slnWithGenerator.sln similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/testAssets/slnWithGenerator/slnWithGenerator.sln rename to test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/slnWithGenerator.sln diff --git a/omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts similarity index 97% rename from omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts rename to test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts index 3fa5aabda..3b4bb74dd 100644 --- a/omnisharptest/omnisharpIntegrationTests/typeDefinitionProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts @@ -5,7 +5,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; -import OmniSharpDefinitionProvider from '../../src/omnisharp/features/definitionProvider'; +import OmniSharpDefinitionProvider from '../../../src/omnisharp/features/definitionProvider'; import * as path from 'path'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { activateCSharpExtension, describeIfNotRazorOrGenerator, restartOmniSharpServer } from './integrationHelpers'; diff --git a/omnisharptest/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts similarity index 97% rename from omnisharptest/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts index 5c6dc8eb8..cceb330ad 100644 --- a/omnisharptest/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/virtualDocumentTracker.integration.test.ts @@ -7,7 +7,7 @@ import { expect, test, beforeAll, afterAll } from '@jest/globals'; import * as vscode from 'vscode'; import { activateCSharpExtension, describeIfNotGenerator, isSlnWithGenerator } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; -import { IDisposable } from '../../src/disposable'; +import { IDisposable } from '../../../src/disposable'; describeIfNotGenerator(`Virtual Document Tracking ${testAssetWorkspace.description}`, function () { const virtualScheme = 'virtual'; diff --git a/omnisharptest/omnisharpIntegrationTests/workspaceSymbolProvider.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/workspaceSymbolProvider.integration.test.ts similarity index 100% rename from omnisharptest/omnisharpIntegrationTests/workspaceSymbolProvider.integration.test.ts rename to test/omnisharp/omnisharpIntegrationTests/workspaceSymbolProvider.integration.test.ts diff --git a/omnisharptest/omnisharpUnitTests/absolutePath.test.ts b/test/omnisharp/omnisharpUnitTests/absolutePath.test.ts similarity index 88% rename from omnisharptest/omnisharpUnitTests/absolutePath.test.ts rename to test/omnisharp/omnisharpUnitTests/absolutePath.test.ts index 9706a2dc8..7df201e21 100644 --- a/omnisharptest/omnisharpUnitTests/absolutePath.test.ts +++ b/test/omnisharp/omnisharpUnitTests/absolutePath.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach, afterEach } from '@jest/globals'; -import { AbsolutePath } from '../../src/packageManager/absolutePath'; -import { TmpAsset, CreateTmpFile } from '../../src/createTmpAsset'; +import { AbsolutePath } from '../../../src/packageManager/absolutePath'; +import { TmpAsset, CreateTmpFile } from '../../../src/createTmpAsset'; import { join } from 'path'; describe(AbsolutePath.name, () => { diff --git a/omnisharptest/omnisharpUnitTests/assets.test.ts b/test/omnisharp/omnisharpUnitTests/assets.test.ts similarity index 99% rename from omnisharptest/omnisharpUnitTests/assets.test.ts rename to test/omnisharp/omnisharpUnitTests/assets.test.ts index 781dac691..8b73e9b63 100644 --- a/omnisharptest/omnisharpUnitTests/assets.test.ts +++ b/test/omnisharp/omnisharpUnitTests/assets.test.ts @@ -14,10 +14,10 @@ import { ProgramLaunchType, replaceCommentPropertiesWithComments, updateJsonWithComments, -} from '../../src/shared/assets'; +} from '../../../src/shared/assets'; import { parse } from 'jsonc-parser'; -import { ProjectDebugInformation } from '../../src/shared/IWorkspaceDebugInformationProvider'; -import { findNetCoreTargetFramework } from '../../src/shared/utils'; +import { ProjectDebugInformation } from '../../../src/shared/IWorkspaceDebugInformationProvider'; +import { findNetCoreTargetFramework } from '../../../src/shared/utils'; import { isNotNull } from '../testUtil'; describe('Asset generation: csproj', () => { diff --git a/omnisharptest/omnisharpUnitTests/common.test.ts b/test/omnisharp/omnisharpUnitTests/common.test.ts similarity index 97% rename from omnisharptest/omnisharpUnitTests/common.test.ts rename to test/omnisharp/omnisharpUnitTests/common.test.ts index 7a669de93..9d454e1e3 100644 --- a/omnisharptest/omnisharpUnitTests/common.test.ts +++ b/test/omnisharp/omnisharpUnitTests/common.test.ts @@ -6,7 +6,7 @@ import { describe, test, expect } from '@jest/globals'; import * as path from 'path'; -import { isSubfolderOf, safeLength, sum } from '../../src/common'; +import { isSubfolderOf, safeLength, sum } from '../../../src/common'; describe('Common', () => { describe('safeLength', () => { diff --git a/omnisharptest/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts b/test/omnisharp/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts similarity index 96% rename from omnisharptest/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts rename to test/omnisharp/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts index f6c4fccbf..ad12001af 100644 --- a/omnisharptest/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts +++ b/test/omnisharp/omnisharpUnitTests/coreclrDebug/targetArchitecture.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { getTargetArchitecture } from '../../../src/coreclrDebug/util'; -import { PlatformInformation } from '../../../src/shared/platform'; -import { DotnetInfo } from '../../../src/shared/utils/dotnetInfo'; +import { getTargetArchitecture } from '../../../../src/coreclrDebug/util'; +import { PlatformInformation } from '../../../../src/shared/platform'; +import { DotnetInfo } from '../../../../src/shared/utils/dotnetInfo'; describe('getTargetArchitecture Tests', () => { describe('Windows', () => { diff --git a/omnisharptest/omnisharpUnitTests/fakes/fakeDotnetResolver.ts b/test/omnisharp/omnisharpUnitTests/fakes/fakeDotnetResolver.ts similarity index 82% rename from omnisharptest/omnisharpUnitTests/fakes/fakeDotnetResolver.ts rename to test/omnisharp/omnisharpUnitTests/fakes/fakeDotnetResolver.ts index 16face947..d74aeb759 100644 --- a/omnisharptest/omnisharpUnitTests/fakes/fakeDotnetResolver.ts +++ b/test/omnisharp/omnisharpUnitTests/fakes/fakeDotnetResolver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IHostExecutableResolver } from '../../../src/shared/constants/IHostExecutableResolver'; -import { HostExecutableInformation } from '../../../src/shared/constants/hostExecutableInformation'; +import { IHostExecutableResolver } from '../../../../src/shared/constants/IHostExecutableResolver'; +import { HostExecutableInformation } from '../../../../src/shared/constants/hostExecutableInformation'; export const fakeMonoInfo: HostExecutableInformation = { version: 'someDotNetVersion', diff --git a/omnisharptest/omnisharpUnitTests/fakes/fakeMonoResolver.ts b/test/omnisharp/omnisharpUnitTests/fakes/fakeMonoResolver.ts similarity index 82% rename from omnisharptest/omnisharpUnitTests/fakes/fakeMonoResolver.ts rename to test/omnisharp/omnisharpUnitTests/fakes/fakeMonoResolver.ts index 6b8be4445..97c45f410 100644 --- a/omnisharptest/omnisharpUnitTests/fakes/fakeMonoResolver.ts +++ b/test/omnisharp/omnisharpUnitTests/fakes/fakeMonoResolver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IHostExecutableResolver } from '../../../src/shared/constants/IHostExecutableResolver'; -import { HostExecutableInformation } from '../../../src/shared/constants/hostExecutableInformation'; +import { IHostExecutableResolver } from '../../../../src/shared/constants/IHostExecutableResolver'; +import { HostExecutableInformation } from '../../../../src/shared/constants/hostExecutableInformation'; export const fakeMonoInfo: HostExecutableInformation = { version: 'someMonoVersion', diff --git a/omnisharptest/omnisharpUnitTests/features/reportIssue.test.ts b/test/omnisharp/omnisharpUnitTests/features/reportIssue.test.ts similarity index 94% rename from omnisharptest/omnisharpUnitTests/features/reportIssue.test.ts rename to test/omnisharp/omnisharpUnitTests/features/reportIssue.test.ts index 13b730615..ff305b40b 100644 --- a/omnisharptest/omnisharpUnitTests/features/reportIssue.test.ts +++ b/test/omnisharp/omnisharpUnitTests/features/reportIssue.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import reportIssue from '../../../src/shared/reportIssue'; -import { FakeMonoResolver, fakeMonoInfo } from '../../omnisharpUnitTests/fakes/fakeMonoResolver'; -import { FakeDotnetResolver } from '../../omnisharpUnitTests/fakes/fakeDotnetResolver'; -import { DotnetInfo } from '../../../src/shared/utils/dotnetInfo'; +import reportIssue from '../../../../src/shared/reportIssue'; +import { FakeMonoResolver, fakeMonoInfo } from '../fakes/fakeMonoResolver'; +import { FakeDotnetResolver } from '../fakes/fakeDotnetResolver'; +import { DotnetInfo } from '../../../../src/shared/utils/dotnetInfo'; import { jest, describe, test, expect, beforeEach } from '@jest/globals'; describe(`${reportIssue.name}`, () => { diff --git a/omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts similarity index 97% rename from omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts index fb36928a1..3659812a8 100644 --- a/omnisharptest/omnisharpUnitTests/informationMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts @@ -5,8 +5,8 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach, afterEach } from '@jest/globals'; -import { InformationMessageObserver } from '../../src/omnisharp/observers/informationMessageObserver'; -import { getUnresolvedDependenices, getWorkspaceConfiguration } from '../../test/unitTests/fakes'; +import { InformationMessageObserver } from '../../../src/omnisharp/observers/informationMessageObserver'; +import { getUnresolvedDependenices, getWorkspaceConfiguration } from '../../fakes'; import { Subject, from as observableFrom } from 'rxjs'; import { timeout } from 'rxjs/operators'; diff --git a/omnisharptest/omnisharpUnitTests/installRuntimeDependencies.test.ts b/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts similarity index 89% rename from omnisharptest/omnisharpUnitTests/installRuntimeDependencies.test.ts rename to test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts index 55409e471..e1a3b89f7 100644 --- a/omnisharptest/omnisharpUnitTests/installRuntimeDependencies.test.ts +++ b/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts @@ -4,13 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { installRuntimeDependencies } from '../../src/installRuntimeDependencies'; -import IInstallDependencies from '../../src/packageManager/IInstallDependencies'; -import { EventStream } from '../../src/eventStream'; -import { PlatformInformation } from '../../src/shared/platform'; -import TestEventBus from '../omnisharpUnitTests/testAssets/testEventBus'; -import { AbsolutePathPackage } from '../../src/packageManager/absolutePathPackage'; -import { Package } from '../../src/packageManager/package'; +import { installRuntimeDependencies } from '../../../src/installRuntimeDependencies'; +import IInstallDependencies from '../../../src/packageManager/IInstallDependencies'; +import { EventStream } from '../../../src/eventStream'; +import { PlatformInformation } from '../../../src/shared/platform'; +import TestEventBus from './testAssets/testEventBus'; +import { AbsolutePathPackage } from '../../../src/packageManager/absolutePathPackage'; +import { Package } from '../../../src/packageManager/package'; import { isNotNull } from '../testUtil'; describe(`${installRuntimeDependencies.name}`, () => { diff --git a/omnisharptest/omnisharpUnitTests/jest.config.ts b/test/omnisharp/omnisharpUnitTests/jest.config.ts similarity index 90% rename from omnisharptest/omnisharpUnitTests/jest.config.ts rename to test/omnisharp/omnisharpUnitTests/jest.config.ts index b913f9a25..842dc5e76 100644 --- a/omnisharptest/omnisharpUnitTests/jest.config.ts +++ b/test/omnisharp/omnisharpUnitTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const jestOmniSharpUnitTestProjectName = 'OmniSharp Unit Tests'; @@ -19,7 +19,7 @@ const omnisharpConfig: Config = { // Specify jest to only run tests in jest folders. // We also have to include the __mocks__ folder. That folder must be next to node_modules so we can't move it, // but if we specify roots, jest won't automatically pick it up. So we have to specify it here. - roots: ['', '/../../__mocks__'], + roots: ['', '/../../../__mocks__'], }; export default omnisharpConfig; diff --git a/omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts similarity index 83% rename from omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts index 47247976f..d601af776 100644 --- a/omnisharptest/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { StatusBarItem } from '../../../src/vscodeAdapter'; -import { OmnisharpBackgroundDiagnosticStatus } from '../../../src/omnisharp/loggingEvents'; -import { BackgroundWorkStatusBarObserver } from '../../../src/omnisharp/observers/backgroundWorkStatusBarObserver'; -import { BackgroundDiagnosticStatus } from '../../../src/omnisharp/protocol'; +import { StatusBarItem } from '../../../../src/vscodeAdapter'; +import { OmnisharpBackgroundDiagnosticStatus } from '../../../../src/omnisharp/loggingEvents'; +import { BackgroundWorkStatusBarObserver } from '../../../../src/omnisharp/observers/backgroundWorkStatusBarObserver'; +import { BackgroundDiagnosticStatus } from '../../../../src/omnisharp/protocol'; describe('BackgroundWorkStatusBarObserver', () => { let showCalled: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/csharpChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/csharpChannelObserver.test.ts similarity index 88% rename from omnisharptest/omnisharpUnitTests/logging/csharpChannelObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/csharpChannelObserver.test.ts index 5c8291098..29dae846c 100644 --- a/omnisharptest/omnisharpUnitTests/logging/csharpChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/csharpChannelObserver.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; -import { CsharpChannelObserver } from '../../../src/shared/observers/csharpChannelObserver'; +import { getNullChannel } from '../../../fakes'; +import { CsharpChannelObserver } from '../../../../src/shared/observers/csharpChannelObserver'; import { InstallationFailure, DebuggerNotInstalledFailure, @@ -14,7 +14,7 @@ import { BaseEvent, PackageInstallStart, IntegrityCheckFailure, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/loggingEvents'; describe('CsharpChannelObserver', () => { [ diff --git a/omnisharptest/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts similarity index 95% rename from omnisharptest/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts index b09c42649..9e18d2451 100644 --- a/omnisharptest/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; -import { CsharpLoggerObserver } from '../../../src/shared/observers/csharpLoggerObserver'; -import { PlatformInformation } from '../../../src/shared/platform'; -import * as Event from '../../../src/omnisharp/loggingEvents'; -import { PackageError } from '../../../src/packageManager/packageError'; -import { Package } from '../../../src/packageManager/package'; +import { getNullChannel } from '../../../fakes'; +import { CsharpLoggerObserver } from '../../../../src/shared/observers/csharpLoggerObserver'; +import { PlatformInformation } from '../../../../src/shared/platform'; +import * as Event from '../../../../src/omnisharp/loggingEvents'; +import { PackageError } from '../../../../src/packageManager/packageError'; +import { Package } from '../../../../src/packageManager/package'; describe('CsharpLoggerObserver', () => { let logOutput = ''; diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts similarity index 81% rename from omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts index 95e2f2c9e..a33c9b4af 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { DotNetChannelObserver } from '../../../src/omnisharp/observers/dotnetChannelObserver'; -import { getNullChannel } from '../../../test/unitTests/fakes'; -import { CommandDotNetRestoreStart } from '../../../src/omnisharp/loggingEvents'; +import { DotNetChannelObserver } from '../../../../src/omnisharp/observers/dotnetChannelObserver'; +import { getNullChannel } from '../../../fakes'; +import { CommandDotNetRestoreStart } from '../../../../src/omnisharp/loggingEvents'; describe('DotnetChannelObserver', () => { let hasShown: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts similarity index 85% rename from omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts index 36c771e20..fc03cfcda 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts @@ -4,14 +4,14 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; -import { DotnetLoggerObserver } from '../../../src/omnisharp/observers/dotnetLoggerObserver'; +import { getNullChannel } from '../../../fakes'; +import { DotnetLoggerObserver } from '../../../../src/omnisharp/observers/dotnetLoggerObserver'; import { CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, CommandDotNetRestoreFailed, EventWithMessage, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/loggingEvents'; describe('DotnetLoggerObserver', () => { [ diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts similarity index 87% rename from omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts index 51dd8dd6b..e44f1741f 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; +import { getNullChannel } from '../../../fakes'; import { BaseEvent, DotNetTestsInClassDebugStart, @@ -12,8 +12,8 @@ import { DotNetTestRunFailure, DotNetTestsInClassRunStart, DotNetTestDebugStart, -} from '../../../src/omnisharp/loggingEvents'; -import DotnetTestChannelObserver from '../../../src/omnisharp/observers/dotnetTestChannelObserver'; +} from '../../../../src/omnisharp/loggingEvents'; +import DotnetTestChannelObserver from '../../../../src/omnisharp/observers/dotnetTestChannelObserver'; describe('DotnetTestChannelObserver', () => { let hasShown: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts similarity index 95% rename from omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts index 7b2d6bd84..1de052626 100644 --- a/omnisharptest/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; +import { getNullChannel } from '../../../fakes'; import { EventWithMessage, DotNetTestDebugWarning, @@ -19,9 +19,9 @@ import { DotNetTestsInClassRunStart, DotNetTestRunInContextStart, DotNetTestDebugInContextStart, -} from '../../../src/omnisharp/loggingEvents'; -import DotNetTestLoggerObserver from '../../../src/omnisharp/observers/dotnetTestLoggerObserver'; -import * as protocol from '../../../src/omnisharp/protocol'; +} from '../../../../src/omnisharp/loggingEvents'; +import DotNetTestLoggerObserver from '../../../../src/omnisharp/observers/dotnetTestLoggerObserver'; +import * as protocol from '../../../../src/omnisharp/protocol'; describe(`${DotNetTestLoggerObserver.name}`, () => { let appendedMessage: string; diff --git a/omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts similarity index 89% rename from omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts index 1e0e948ba..f4670de6a 100644 --- a/omnisharptest/omnisharpUnitTests/logging/errorMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts @@ -4,17 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { vscode } from '../../../src/vscodeAdapter'; +import { vscode } from '../../../../src/vscodeAdapter'; -import { ErrorMessageObserver } from '../../../src/omnisharp/observers/errorMessageObserver'; +import { ErrorMessageObserver } from '../../../../src/omnisharp/observers/errorMessageObserver'; import { ZipError, DotNetTestRunFailure, DotNetTestDebugStartFailure, EventWithMessage, IntegrityCheckFailure, -} from '../../../src/omnisharp/loggingEvents'; -import { getFakeVsCode } from '../../../test/unitTests/fakes'; +} from '../../../../src/omnisharp/loggingEvents'; +import { getFakeVsCode } from '../../../fakes'; describe('ErrorMessageObserver', () => { const vscode: vscode = getFakeVsCode(); diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts similarity index 94% rename from omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts index dbb9af29f..27ea269e5 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts @@ -5,15 +5,15 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel, getWorkspaceConfiguration } from '../../../test/unitTests/fakes'; -import { OmnisharpChannelObserver } from '../../../src/omnisharp/observers/omnisharpChannelObserver'; +import { getNullChannel, getWorkspaceConfiguration } from '../../../fakes'; +import { OmnisharpChannelObserver } from '../../../../src/omnisharp/observers/omnisharpChannelObserver'; import { OmnisharpFailure, ShowOmniSharpChannel, BaseEvent, OmnisharpRestart, OmnisharpServerOnStdErr, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/loggingEvents'; import { Subject } from 'rxjs'; describe('OmnisharpChannelObserver', () => { diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts similarity index 96% rename from omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts index 9973901d5..df2680e1e 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; +import { getNullChannel } from '../../../fakes'; import { OmnisharpServerVerboseMessage, EventWithMessage, @@ -14,8 +14,8 @@ import { OmnisharpEventPacketReceived, OmnisharpServerProcessRequestComplete, OmnisharpServerRequestCancelled, -} from '../../../src/omnisharp/loggingEvents'; -import { OmnisharpDebugModeLoggerObserver } from '../../../src/omnisharp/observers/omnisharpDebugModeLoggerObserver'; +} from '../../../../src/omnisharp/loggingEvents'; +import { OmnisharpDebugModeLoggerObserver } from '../../../../src/omnisharp/observers/omnisharpDebugModeLoggerObserver'; describe('OmnisharpDebugModeLoggerObserver', () => { let logOutput = ''; diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts similarity index 97% rename from omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts index fa4b28137..7de44e78a 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts @@ -2,9 +2,9 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { getNullChannel } from '../../../test/unitTests/fakes'; +import { getNullChannel } from '../../../fakes'; import { describe, test, expect, beforeEach } from '@jest/globals'; -import { OmnisharpLoggerObserver } from '../../../src/omnisharp/observers/omnisharpLoggerObserver'; +import { OmnisharpLoggerObserver } from '../../../../src/omnisharp/observers/omnisharpLoggerObserver'; import { OmnisharpServerMsBuildProjectDiagnostics, EventWithMessage, @@ -16,9 +16,9 @@ import { OmnisharpServerOnError, OmnisharpFailure, OmnisharpEventPacketReceived, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/loggingEvents'; import { OutputChannel } from 'vscode'; -import { PlatformInformation } from '../../../src/shared/platform'; +import { PlatformInformation } from '../../../../src/shared/platform'; describe('OmnisharpLoggerObserver', () => { let logOutput = ''; diff --git a/omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts similarity index 96% rename from omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts index f5ef806bc..d2b9f2c3e 100644 --- a/omnisharptest/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { StatusBarItem } from '../../../src/vscodeAdapter'; +import { StatusBarItem } from '../../../../src/vscodeAdapter'; import { OmnisharpOnBeforeServerInstall, OmnisharpOnBeforeServerStart, @@ -17,11 +17,11 @@ import { OmnisharpServerOnStdErr, BaseEvent, InstallationSuccess, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/loggingEvents'; import { OmnisharpStatusBarObserver, StatusBarColors, -} from '../../../src/omnisharp/observers/omnisharpStatusBarObserver'; +} from '../../../../src/omnisharp/observers/omnisharpStatusBarObserver'; describe('OmnisharpStatusBarObserver', () => { let showCalled: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts similarity index 91% rename from omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts index 79a8ddeb5..f92f585ba 100644 --- a/omnisharptest/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts @@ -4,10 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getWorkspaceInformationUpdated, getMSBuildWorkspaceInformation } from '../../../test/unitTests/fakes'; -import { StatusBarItem } from '../../../src/vscodeAdapter'; -import { ProjectStatusBarObserver } from '../../../src/omnisharp/observers/projectStatusBarObserver'; -import { OmnisharpOnMultipleLaunchTargets, OmnisharpServerOnStop } from '../../../src/omnisharp/loggingEvents'; +import { getWorkspaceInformationUpdated, getMSBuildWorkspaceInformation } from '../../../fakes'; +import { StatusBarItem } from '../../../../src/vscodeAdapter'; +import { ProjectStatusBarObserver } from '../../../../src/omnisharp/observers/projectStatusBarObserver'; +import { OmnisharpOnMultipleLaunchTargets, OmnisharpServerOnStop } from '../../../../src/omnisharp/loggingEvents'; describe('ProjectStatusBarObserver', () => { let showCalled: boolean; diff --git a/omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts similarity index 87% rename from omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts index a5b15aac6..c069235c8 100644 --- a/omnisharptest/omnisharpUnitTests/logging/razorLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel } from '../../../test/unitTests/fakes'; -import { RazorLoggerObserver } from '../../../src/omnisharp/observers/razorLoggerObserver'; +import { getNullChannel } from '../../../fakes'; +import { RazorLoggerObserver } from '../../../../src/omnisharp/observers/razorLoggerObserver'; import { RazorPluginPathSpecified, RazorPluginPathDoesNotExist, RazorDevModeActive, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/loggingEvents'; describe('RazorLoggerObserver', () => { let logOutput = ''; diff --git a/omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts similarity index 95% rename from omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts index 0aecfb5b5..78ba21378 100644 --- a/omnisharptest/omnisharpUnitTests/logging/telemetryObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { beforeEach, test, describe, expect } from '@jest/globals'; -import { TelemetryObserver } from '../../../src/omnisharp/observers/telemetryObserver'; -import { PlatformInformation } from '../../../src/shared/platform'; +import { TelemetryObserver } from '../../../../src/omnisharp/observers/telemetryObserver'; +import { PlatformInformation } from '../../../../src/shared/platform'; import { PackageInstallation, InstallationFailure, @@ -17,10 +17,10 @@ import { TelemetryEvent, ProjectConfiguration, TelemetryErrorEvent, -} from '../../../src/omnisharp/loggingEvents'; -import { getNullTelemetryReporter } from '../../../test/unitTests/fakes'; -import { Package } from '../../../src/packageManager/package'; -import { PackageError } from '../../../src/packageManager/packageError'; +} from '../../../../src/omnisharp/loggingEvents'; +import { getNullTelemetryReporter } from '../../../fakes'; +import { Package } from '../../../../src/packageManager/package'; +import { PackageError } from '../../../../src/packageManager/packageError'; import { isNotNull } from '../../testUtil'; describe('TelemetryReporterObserver', () => { diff --git a/omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts similarity index 97% rename from omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts index 0188991c5..d0e1e19a7 100644 --- a/omnisharptest/omnisharpUnitTests/logging/warningMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { WarningMessageObserver } from '../../../src/omnisharp/observers/warningMessageObserver'; +import { WarningMessageObserver } from '../../../../src/omnisharp/observers/warningMessageObserver'; import { getFakeVsCode, getMSBuildDiagnosticsMessage, getOmnisharpMSBuildProjectDiagnosticsEvent, getOmnisharpServerOnErrorEvent, -} from '../../../test/unitTests/fakes'; -import { vscode } from '../../../src/vscodeAdapter'; +} from '../../../fakes'; +import { vscode } from '../../../../src/vscodeAdapter'; import { TestScheduler } from 'rxjs/testing'; import { from as observableFrom, Subject } from 'rxjs'; import { timeout, map } from 'rxjs/operators'; diff --git a/omnisharptest/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts similarity index 93% rename from omnisharptest/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts rename to test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts index d084153cb..af8b9c7c9 100644 --- a/omnisharptest/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts @@ -5,10 +5,10 @@ import * as vscode from 'vscode'; import { describe, test, expect, beforeEach, jest } from '@jest/globals'; -import { OmniSharpMonoResolver } from '../../../src/omnisharp/omniSharpMonoResolver'; +import { OmniSharpMonoResolver } from '../../../../src/omnisharp/omniSharpMonoResolver'; import { join } from 'path'; -import { getWorkspaceConfiguration } from '../../../test/unitTests/fakes'; +import { getWorkspaceConfiguration } from '../../../fakes'; describe(`${OmniSharpMonoResolver.name}`, () => { let getMonoCalled: boolean; diff --git a/omnisharptest/omnisharpUnitTests/omnisharpDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts similarity index 84% rename from omnisharptest/omnisharpUnitTests/omnisharpDownloader.test.ts rename to test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts index 6cb120494..afc90a1f8 100644 --- a/omnisharptest/omnisharpUnitTests/omnisharpDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach, afterEach } from '@jest/globals'; -import { OmnisharpDownloader } from '../../src/omnisharp/omnisharpDownloader'; -import NetworkSettings from '../../src/networkSettings'; -import { EventStream } from '../../src/eventStream'; -import { PlatformInformation } from '../../src/shared/platform'; -import { CreateTmpDir, TmpAsset } from '../../src/createTmpAsset'; -import * as util from '../../src/common'; +import { OmnisharpDownloader } from '../../../src/omnisharp/omnisharpDownloader'; +import NetworkSettings from '../../../src/networkSettings'; +import { EventStream } from '../../../src/eventStream'; +import { PlatformInformation } from '../../../src/shared/platform'; +import { CreateTmpDir, TmpAsset } from '../../../src/createTmpAsset'; +import * as util from '../../../src/common'; import * as path from 'path'; -import MockHttpsServer from '../omnisharpUnitTests/testAssets/mockHttpsServer'; -import TestZip from '../omnisharpUnitTests/testAssets/testZip'; -import { createTestFile } from '../omnisharpUnitTests/testAssets/testFile'; +import MockHttpsServer from './testAssets/mockHttpsServer'; +import TestZip from './testAssets/testZip'; +import { createTestFile } from './testAssets/testFile'; import { PackageInstallation, LogPlatformInfo, @@ -24,10 +24,10 @@ import { InstallationStart, InstallationSuccess, PackageInstallStart, -} from '../../src/omnisharp/loggingEvents'; -import TestEventBus from '../omnisharpUnitTests/testAssets/testEventBus'; -import { testPackageJSON } from '../omnisharpUnitTests/testAssets/testAssets'; -import { modernNetVersion } from '../../src/omnisharp/omnisharpPackageCreator'; +} from '../../../src/omnisharp/loggingEvents'; +import TestEventBus from './testAssets/testEventBus'; +import { testPackageJSON } from './testAssets/testAssets'; +import { modernNetVersion } from '../../../src/omnisharp/omnisharpPackageCreator'; [true, false].forEach((useFramework) => { describe(`OmnisharpDownloader (useFramework: ${useFramework})`, () => { diff --git a/omnisharptest/omnisharpUnitTests/omnisharpManager.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts similarity index 91% rename from omnisharptest/omnisharpUnitTests/omnisharpManager.test.ts rename to test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts index 93226e665..f4edaf802 100644 --- a/omnisharptest/omnisharpUnitTests/omnisharpManager.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach, afterEach } from '@jest/globals'; -import { OmnisharpManager } from '../../src/omnisharp/omnisharpManager'; -import MockHttpsServer from '../omnisharpUnitTests/testAssets/mockHttpsServer'; -import TestZip from '../omnisharpUnitTests/testAssets/testZip'; -import { createTestFile } from '../omnisharpUnitTests/testAssets/testFile'; -import { PlatformInformation } from '../../src/shared/platform'; -import { OmnisharpDownloader } from '../../src/omnisharp/omnisharpDownloader'; -import NetworkSettings from '../../src/networkSettings'; -import { EventStream } from '../../src/eventStream'; -import { testPackageJSON } from '../omnisharpUnitTests/testAssets/testAssets'; -import { TmpAsset, CreateTmpDir, CreateTmpFile } from '../../src/createTmpAsset'; +import { OmnisharpManager } from '../../../src/omnisharp/omnisharpManager'; +import MockHttpsServer from './testAssets/mockHttpsServer'; +import TestZip from './testAssets/testZip'; +import { createTestFile } from './testAssets/testFile'; +import { PlatformInformation } from '../../../src/shared/platform'; +import { OmnisharpDownloader } from '../../../src/omnisharp/omnisharpDownloader'; +import NetworkSettings from '../../../src/networkSettings'; +import { EventStream } from '../../../src/eventStream'; +import { testPackageJSON } from './testAssets/testAssets'; +import { TmpAsset, CreateTmpDir, CreateTmpFile } from '../../../src/createTmpAsset'; import * as path from 'path'; -import * as util from '../../src/common'; -import { modernNetVersion } from '../../src/omnisharp/omnisharpPackageCreator'; +import * as util from '../../../src/common'; +import { modernNetVersion } from '../../../src/omnisharp/omnisharpPackageCreator'; describe(OmnisharpManager.name, () => { let server: MockHttpsServer; diff --git a/omnisharptest/omnisharpUnitTests/omnisharpPackageCreator.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpPackageCreator.test.ts similarity index 98% rename from omnisharptest/omnisharpUnitTests/omnisharpPackageCreator.test.ts rename to test/omnisharp/omnisharpUnitTests/omnisharpPackageCreator.test.ts index acfd63bc5..68425752c 100644 --- a/omnisharptest/omnisharpUnitTests/omnisharpPackageCreator.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpPackageCreator.test.ts @@ -8,9 +8,9 @@ import { SetBinaryAndGetPackage, GetPackagesFromVersion, modernNetVersion, -} from '../../src/omnisharp/omnisharpPackageCreator'; -import { Package } from '../../src/packageManager/package'; -import { testPackageJSON } from '../omnisharpUnitTests/testAssets/testAssets'; +} from '../../../src/omnisharp/omnisharpPackageCreator'; +import { Package } from '../../../src/packageManager/package'; +import { testPackageJSON } from './testAssets/testAssets'; import { isNotNull } from '../testUtil'; describe('GetOmnisharpPackage : Output package depends on the input package and other input parameters like serverUrl', () => { diff --git a/omnisharptest/omnisharpUnitTests/optionChangeObserver.test.ts b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts similarity index 97% rename from omnisharptest/omnisharpUnitTests/optionChangeObserver.test.ts rename to test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts index f24983699..de1b4c1b7 100644 --- a/omnisharptest/omnisharpUnitTests/optionChangeObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts @@ -5,11 +5,11 @@ import { timeout } from 'rxjs/operators'; import { from as observableFrom, Subject, BehaviorSubject } from 'rxjs'; -import { registerOmnisharpOptionChanges } from '../../src/omnisharp/omnisharpOptionChanges'; +import { registerOmnisharpOptionChanges } from '../../../src/omnisharp/omnisharpOptionChanges'; import { describe, beforeEach, test, expect } from '@jest/globals'; import * as vscode from 'vscode'; -import { getVSCodeWithConfig, updateConfig } from '../../test/unitTests/fakes'; +import { getVSCodeWithConfig, updateConfig } from '../../fakes'; describe('OmniSharpConfigChangeObserver', () => { let doClickOk: () => void; diff --git a/omnisharptest/omnisharpUnitTests/optionStream.test.ts b/test/omnisharp/omnisharpUnitTests/optionStream.test.ts similarity index 93% rename from omnisharptest/omnisharpUnitTests/optionStream.test.ts rename to test/omnisharp/omnisharpUnitTests/optionStream.test.ts index 21923dbe7..6817977ef 100644 --- a/omnisharptest/omnisharpUnitTests/optionStream.test.ts +++ b/test/omnisharp/omnisharpUnitTests/optionStream.test.ts @@ -6,8 +6,8 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach } from '@jest/globals'; import { Observable } from 'rxjs'; -import createOptionStream from '../../src/shared/observables/createOptionStream'; -import Disposable from '../../src/disposable'; +import createOptionStream from '../../../src/shared/observables/createOptionStream'; +import Disposable from '../../../src/disposable'; describe('OptionStream', () => { let listenerFunction: Array<(e: vscode.ConfigurationChangeEvent) => any>; diff --git a/omnisharptest/omnisharpUnitTests/options.test.ts b/test/omnisharp/omnisharpUnitTests/options.test.ts similarity index 97% rename from omnisharptest/omnisharpUnitTests/options.test.ts rename to test/omnisharp/omnisharpUnitTests/options.test.ts index 203168696..a07b9c099 100644 --- a/omnisharptest/omnisharpUnitTests/options.test.ts +++ b/test/omnisharp/omnisharpUnitTests/options.test.ts @@ -7,8 +7,8 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach } from '@jest/globals'; import { URI } from 'vscode-uri'; import * as path from 'path'; -import { commonOptions, omnisharpOptions } from '../../src/shared/options'; -import { getWorkspaceConfiguration } from '../../test/unitTests/fakes'; +import { commonOptions, omnisharpOptions } from '../../../src/shared/options'; +import { getWorkspaceConfiguration } from '../../fakes'; describe('Options tests', () => { beforeEach(() => { diff --git a/omnisharptest/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts similarity index 90% rename from omnisharptest/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts rename to test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 6468a0f6e..1f1612774 100644 --- a/omnisharptest/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -5,12 +5,12 @@ import { describe, test, expect, beforeEach, afterEach } from '@jest/globals'; import * as path from 'path'; -import * as util from '../../../src/common'; -import { CreateTmpDir, TmpAsset } from '../../../src/createTmpAsset'; -import TestZip from '../../omnisharpUnitTests/testAssets/testZip'; -import { downloadAndInstallPackages } from '../../../src/packageManager/downloadAndInstallPackages'; -import NetworkSettings from '../../../src/networkSettings'; -import { EventStream } from '../../../src/eventStream'; +import * as util from '../../../../src/common'; +import { CreateTmpDir, TmpAsset } from '../../../../src/createTmpAsset'; +import TestZip from '../testAssets/testZip'; +import { downloadAndInstallPackages } from '../../../../src/packageManager/downloadAndInstallPackages'; +import NetworkSettings from '../../../../src/networkSettings'; +import { EventStream } from '../../../../src/eventStream'; import { DownloadStart, DownloadSizeObtained, @@ -21,13 +21,13 @@ import { IntegrityCheckFailure, DownloadFailure, InstallationFailure, -} from '../../../src/omnisharp/loggingEvents'; -import MockHttpsServer from '../../omnisharpUnitTests/testAssets/mockHttpsServer'; -import { createTestFile } from '../../omnisharpUnitTests/testAssets/testFile'; -import TestEventBus from '../../omnisharpUnitTests/testAssets/testEventBus'; -import { AbsolutePathPackage } from '../../../src/packageManager/absolutePathPackage'; -import { AbsolutePath } from '../../../src/packageManager/absolutePath'; -import { DownloadValidator } from '../../../src/packageManager/isValidDownload'; +} from '../../../../src/omnisharp/loggingEvents'; +import MockHttpsServer from '../testAssets/mockHttpsServer'; +import { createTestFile } from '../testAssets/testFile'; +import TestEventBus from '../testAssets/testEventBus'; +import { AbsolutePathPackage } from '../../../../src/packageManager/absolutePathPackage'; +import { AbsolutePath } from '../../../../src/packageManager/absolutePath'; +import { DownloadValidator } from '../../../../src/packageManager/isValidDownload'; describe(`${downloadAndInstallPackages.name}`, () => { let tmpInstallDir: TmpAsset; diff --git a/omnisharptest/omnisharpUnitTests/packages/fileDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts similarity index 93% rename from omnisharptest/omnisharpUnitTests/packages/fileDownloader.test.ts rename to test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts index 852f1c0a1..29d69fbc8 100644 --- a/omnisharptest/omnisharpUnitTests/packages/fileDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach, afterEach } from '@jest/globals'; -import { EventStream } from '../../../src/eventStream'; -import { DownloadFile } from '../../../src/packageManager/fileDownloader'; -import NetworkSettings from '../../../src/networkSettings'; +import { EventStream } from '../../../../src/eventStream'; +import { DownloadFile } from '../../../../src/packageManager/fileDownloader'; +import NetworkSettings from '../../../../src/networkSettings'; import { DownloadStart, DownloadSizeObtained, @@ -14,9 +14,9 @@ import { DownloadSuccess, DownloadFallBack, DownloadFailure, -} from '../../../src/omnisharp/loggingEvents'; -import MockHttpsServer from '../../omnisharpUnitTests/testAssets/mockHttpsServer'; -import TestEventBus from '../../omnisharpUnitTests/testAssets/testEventBus'; +} from '../../../../src/omnisharp/loggingEvents'; +import MockHttpsServer from '../testAssets/mockHttpsServer'; +import TestEventBus from '../testAssets/testEventBus'; describe('FileDownloader', () => { const fileDescription = 'Test file'; diff --git a/omnisharptest/omnisharpUnitTests/packages/isValidDownload.test.ts b/test/omnisharp/omnisharpUnitTests/packages/isValidDownload.test.ts similarity index 89% rename from omnisharptest/omnisharpUnitTests/packages/isValidDownload.test.ts rename to test/omnisharp/omnisharpUnitTests/packages/isValidDownload.test.ts index 21430cf2c..c53f7f192 100644 --- a/omnisharptest/omnisharpUnitTests/packages/isValidDownload.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/isValidDownload.test.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { isValidDownload } from '../../../src/packageManager/isValidDownload'; -import { EventStream } from '../../../src/eventStream'; +import { isValidDownload } from '../../../../src/packageManager/isValidDownload'; +import { EventStream } from '../../../../src/eventStream'; describe(`${isValidDownload.name}`, () => { const sampleBuffer = Buffer.from('sampleBuffer'); diff --git a/omnisharptest/omnisharpUnitTests/packages/packageFilterer.test.ts b/test/omnisharp/omnisharpUnitTests/packages/packageFilterer.test.ts similarity index 92% rename from omnisharptest/omnisharpUnitTests/packages/packageFilterer.test.ts rename to test/omnisharp/omnisharpUnitTests/packages/packageFilterer.test.ts index a65405ce9..85423fd52 100644 --- a/omnisharptest/omnisharpUnitTests/packages/packageFilterer.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/packageFilterer.test.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach, jest } from '@jest/globals'; -import { PlatformInformation } from '../../../src/shared/platform'; -import { getNotInstalledPackagesForPlatform } from '../../../src/packageManager/packageFilterer'; -import { Package } from '../../../src/packageManager/package'; -import { AbsolutePathPackage } from '../../../src/packageManager/absolutePathPackage'; +import { PlatformInformation } from '../../../../src/shared/platform'; +import { getNotInstalledPackagesForPlatform } from '../../../../src/packageManager/packageFilterer'; +import { Package } from '../../../../src/packageManager/package'; +import { AbsolutePathPackage } from '../../../../src/packageManager/absolutePathPackage'; import { MockedFunction } from 'jest-mock'; import * as fs from 'fs'; import { join } from 'path'; diff --git a/omnisharptest/omnisharpUnitTests/packages/zipInstaller.test.ts b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts similarity index 86% rename from omnisharptest/omnisharpUnitTests/packages/zipInstaller.test.ts rename to test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts index 66be19b33..e92062d4a 100644 --- a/omnisharptest/omnisharpUnitTests/packages/zipInstaller.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts @@ -6,16 +6,16 @@ import { describe, test, expect, beforeEach, afterEach } from '@jest/globals'; import * as fs from 'async-file'; import * as path from 'path'; -import * as util from '../../../src/common'; -import { CreateTmpDir, TmpAsset } from '../../../src/createTmpAsset'; -import { InstallZip } from '../../../src/packageManager/zipInstaller'; -import { EventStream } from '../../../src/eventStream'; -import { PlatformInformation } from '../../../src/shared/platform'; -import { BaseEvent, InstallationStart, ZipError } from '../../../src/omnisharp/loggingEvents'; -import { createTestFile } from '../../omnisharpUnitTests/testAssets/testFile'; -import TestZip from '../../omnisharpUnitTests/testAssets/testZip'; -import TestEventBus from '../../omnisharpUnitTests/testAssets/testEventBus'; -import { AbsolutePath } from '../../../src/packageManager/absolutePath'; +import * as util from '../../../../src/common'; +import { CreateTmpDir, TmpAsset } from '../../../../src/createTmpAsset'; +import { InstallZip } from '../../../../src/packageManager/zipInstaller'; +import { EventStream } from '../../../../src/eventStream'; +import { PlatformInformation } from '../../../../src/shared/platform'; +import { BaseEvent, InstallationStart, ZipError } from '../../../../src/omnisharp/loggingEvents'; +import { createTestFile } from '../testAssets/testFile'; +import TestZip from '../testAssets/testZip'; +import TestEventBus from '../testAssets/testEventBus'; +import { AbsolutePath } from '../../../../src/packageManager/absolutePath'; describe('ZipInstaller', () => { const binaries = [createTestFile('binary1', 'binary1.txt'), createTestFile('binary2', 'binary2.txt')]; diff --git a/omnisharptest/omnisharpUnitTests/platform.test.ts b/test/omnisharp/omnisharpUnitTests/platform.test.ts similarity index 98% rename from omnisharptest/omnisharpUnitTests/platform.test.ts rename to test/omnisharp/omnisharpUnitTests/platform.test.ts index ed0385192..4d332c22d 100644 --- a/omnisharptest/omnisharpUnitTests/platform.test.ts +++ b/test/omnisharp/omnisharpUnitTests/platform.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { LinuxDistribution } from '../../src/shared/platform'; +import { LinuxDistribution } from '../../../src/shared/platform'; describe('Platform', () => { test('Retrieve correct information for Ubuntu 14.04', () => { diff --git a/omnisharptest/omnisharpUnitTests/processPicker.test.ts b/test/omnisharp/omnisharpUnitTests/processPicker.test.ts similarity index 99% rename from omnisharptest/omnisharpUnitTests/processPicker.test.ts rename to test/omnisharp/omnisharpUnitTests/processPicker.test.ts index 5a18a1358..3798131c4 100644 --- a/omnisharptest/omnisharpUnitTests/processPicker.test.ts +++ b/test/omnisharp/omnisharpUnitTests/processPicker.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { RemoteAttachPicker, Process, CimProcessParser } from '../../src/omnisharp/features/processPicker'; +import { RemoteAttachPicker, Process, CimProcessParser } from '../../../src/omnisharp/features/processPicker'; describe('Remote Process Picker: Validate quoting arguments.', () => { test('Argument with no spaces', () => { diff --git a/omnisharptest/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts b/test/omnisharp/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts similarity index 88% rename from omnisharptest/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts rename to test/omnisharp/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts index 1086caf96..47a8db2c8 100644 --- a/omnisharptest/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts +++ b/test/omnisharp/omnisharpUnitTests/testAssets/getConfigChangeEvent.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ConfigurationChangeEvent } from '../../../src/vscodeAdapter'; +import { ConfigurationChangeEvent } from '../../../../src/vscodeAdapter'; export function GetConfigChangeEvent(changingConfig: string): ConfigurationChangeEvent { return { diff --git a/omnisharptest/omnisharpUnitTests/testAssets/mockHttpsServer.ts b/test/omnisharp/omnisharpUnitTests/testAssets/mockHttpsServer.ts similarity index 89% rename from omnisharptest/omnisharpUnitTests/testAssets/mockHttpsServer.ts rename to test/omnisharp/omnisharpUnitTests/testAssets/mockHttpsServer.ts index e2dd76bf0..cea2c21fe 100644 --- a/omnisharptest/omnisharpUnitTests/testAssets/mockHttpsServer.ts +++ b/test/omnisharp/omnisharpUnitTests/testAssets/mockHttpsServer.ts @@ -44,8 +44,8 @@ export default class MockHttpsServer { const server = new ServerMock(null, { host: 'localhost', port: port, - key: await fs.readFile('omnisharptest/omnisharpUnitTests/testAssets/private.pem'), - cert: await fs.readFile('omnisharptest/omnisharpUnitTests/testAssets/public.pem'), + key: await fs.readFile('test/omnisharp/omnisharpUnitTests/testAssets/private.pem'), + cert: await fs.readFile('test/omnisharp/omnisharpUnitTests/testAssets/public.pem'), }); return new MockHttpsServer(server, `https://localhost:${port}`); diff --git a/omnisharptest/omnisharpUnitTests/testAssets/private.pem b/test/omnisharp/omnisharpUnitTests/testAssets/private.pem similarity index 100% rename from omnisharptest/omnisharpUnitTests/testAssets/private.pem rename to test/omnisharp/omnisharpUnitTests/testAssets/private.pem diff --git a/omnisharptest/omnisharpUnitTests/testAssets/public.pem b/test/omnisharp/omnisharpUnitTests/testAssets/public.pem similarity index 100% rename from omnisharptest/omnisharpUnitTests/testAssets/public.pem rename to test/omnisharp/omnisharpUnitTests/testAssets/public.pem diff --git a/omnisharptest/omnisharpUnitTests/testAssets/testAssets.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testAssets.ts similarity index 100% rename from omnisharptest/omnisharpUnitTests/testAssets/testAssets.ts rename to test/omnisharp/omnisharpUnitTests/testAssets/testAssets.ts diff --git a/omnisharptest/omnisharpUnitTests/testAssets/testEventBus.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts similarity index 80% rename from omnisharptest/omnisharpUnitTests/testAssets/testEventBus.ts rename to test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts index 25b7b44ff..7fa580cf0 100644 --- a/omnisharptest/omnisharpUnitTests/testAssets/testEventBus.ts +++ b/test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { EventStream } from '../../../src/eventStream'; -import { BaseEvent } from '../../../src/omnisharp/loggingEvents'; -import Disposable, { IDisposable } from '../../../src/disposable'; +import { EventStream } from '../../../../src/eventStream'; +import { BaseEvent } from '../../../../src/omnisharp/loggingEvents'; +import Disposable, { IDisposable } from '../../../../src/disposable'; export default class TestEventBus { private eventBus: Array; diff --git a/omnisharptest/omnisharpUnitTests/testAssets/testFile.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testFile.ts similarity index 100% rename from omnisharptest/omnisharpUnitTests/testAssets/testFile.ts rename to test/omnisharp/omnisharpUnitTests/testAssets/testFile.ts diff --git a/omnisharptest/omnisharpUnitTests/testAssets/testZip.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts similarity index 100% rename from omnisharptest/omnisharpUnitTests/testAssets/testZip.ts rename to test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts diff --git a/omnisharptest/runFeatureTests.ts b/test/omnisharp/runFeatureTests.ts similarity index 100% rename from omnisharptest/runFeatureTests.ts rename to test/omnisharp/runFeatureTests.ts diff --git a/omnisharptest/testUtil.ts b/test/omnisharp/testUtil.ts similarity index 100% rename from omnisharptest/testUtil.ts rename to test/omnisharp/testUtil.ts diff --git a/test/razorIntegrationTests/formatting.integration.test.ts b/test/razor/razorIntegrationTests/formatting.integration.test.ts similarity index 97% rename from test/razorIntegrationTests/formatting.integration.test.ts rename to test/razor/razorIntegrationTests/formatting.integration.test.ts index 1407c2fc6..bb59c8e8c 100644 --- a/test/razorIntegrationTests/formatting.integration.test.ts +++ b/test/razor/razorIntegrationTests/formatting.integration.test.ts @@ -7,7 +7,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; import { describe, beforeAll, afterAll, test, expect, beforeEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; -import * as integrationHelpers from '../integrationTests/integrationHelpers'; +import * as integrationHelpers from '../../lsptoolshost/integrationTests/integrationHelpers'; describe(`Razor Formatting ${testAssetWorkspace.description}`, function () { beforeAll(async function () { diff --git a/test/razorIntegrationTests/hover.integration.test.ts b/test/razor/razorIntegrationTests/hover.integration.test.ts similarity index 95% rename from test/razorIntegrationTests/hover.integration.test.ts rename to test/razor/razorIntegrationTests/hover.integration.test.ts index 50ca0d712..5564ab466 100644 --- a/test/razorIntegrationTests/hover.integration.test.ts +++ b/test/razor/razorIntegrationTests/hover.integration.test.ts @@ -7,7 +7,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; import { describe, beforeAll, afterAll, test, expect, beforeEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; -import * as integrationHelpers from '../integrationTests/integrationHelpers'; +import * as integrationHelpers from '../../lsptoolshost/integrationTests/integrationHelpers'; describe(`Razor Hover ${testAssetWorkspace.description}`, function () { beforeAll(async function () { diff --git a/omnisharptest/omnisharpIntegrationTests/index.ts b/test/razor/razorIntegrationTests/index.ts similarity index 88% rename from omnisharptest/omnisharpIntegrationTests/index.ts rename to test/razor/razorIntegrationTests/index.ts index e3473f5f9..ac2e6a90a 100644 --- a/omnisharptest/omnisharpIntegrationTests/index.ts +++ b/test/razor/razorIntegrationTests/index.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { runIntegrationTests } from '../../test/runIntegrationTests'; +import { runIntegrationTests } from '../../runIntegrationTests'; import { jestIntegrationTestProjectName } from './jest.config'; export async function run() { diff --git a/test/razorIntegrationTests/jest.config.ts b/test/razor/razorIntegrationTests/jest.config.ts similarity index 75% rename from test/razorIntegrationTests/jest.config.ts rename to test/razor/razorIntegrationTests/jest.config.ts index 7157e8c75..fd5bec1dc 100644 --- a/test/razorIntegrationTests/jest.config.ts +++ b/test/razor/razorIntegrationTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const jestIntegrationTestProjectName = 'Razor Integration Tests'; @@ -14,8 +14,8 @@ const integrationTestConfig: Config = { ...baseProjectConfig, displayName: jestIntegrationTestProjectName, roots: [''], - testEnvironment: '/../integrationTests/jestSetup/vsCodeEnvironment.ts', - setupFilesAfterEnv: ['/../integrationTests/jestSetup/vsCodeFramework.ts'], + testEnvironment: '/../../vsCodeEnvironment.ts', + setupFilesAfterEnv: ['/../../vsCodeFramework.ts'], }; export default integrationTestConfig; diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.csproj diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.sln b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.sln similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.sln rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/BasicRazorApp2_1.sln diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/BadlyFormatted.razor b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/BadlyFormatted.razor similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/BadlyFormatted.razor rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/BadlyFormatted.razor diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/ErrorHaver.razor diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Pages/Index.cshtml diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/Program.cs diff --git a/test/razorIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml similarity index 100% rename from test/razorIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/_ViewImports.cshtml diff --git a/test/razorIntegrationTests/testAssets/NuGet.config b/test/razor/razorIntegrationTests/testAssets/NuGet.config similarity index 100% rename from test/razorIntegrationTests/testAssets/NuGet.config rename to test/razor/razorIntegrationTests/testAssets/NuGet.config diff --git a/test/razorIntegrationTests/testAssets/basicRazorApp21.ts b/test/razor/razorIntegrationTests/testAssets/basicRazorApp21.ts similarity index 84% rename from test/razorIntegrationTests/testAssets/basicRazorApp21.ts rename to test/razor/razorIntegrationTests/testAssets/basicRazorApp21.ts index 51d51301d..8d6eff9a1 100644 --- a/test/razorIntegrationTests/testAssets/basicRazorApp21.ts +++ b/test/razor/razorIntegrationTests/testAssets/basicRazorApp21.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITestAssetWorkspace } from '../../integrationTests/testAssets/testAssets'; +import { ITestAssetWorkspace } from '../../../lsptoolshost/integrationTests/testAssets/testAssets'; const workspace: ITestAssetWorkspace = { description: 'Basic Razor app', diff --git a/test/razorIntegrationTests/testAssets/testAssetWorkspace.ts b/test/razor/razorIntegrationTests/testAssets/testAssetWorkspace.ts similarity index 86% rename from test/razorIntegrationTests/testAssets/testAssetWorkspace.ts rename to test/razor/razorIntegrationTests/testAssets/testAssetWorkspace.ts index c193e4468..6e1692c01 100644 --- a/test/razorIntegrationTests/testAssets/testAssetWorkspace.ts +++ b/test/razor/razorIntegrationTests/testAssets/testAssetWorkspace.ts @@ -7,7 +7,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; import BasicRazorApp2_1 from './basicRazorApp21'; -import { ITestAssetWorkspace, TestAssetWorkspace } from '../../integrationTests/testAssets/testAssets'; +import { ITestAssetWorkspace, TestAssetWorkspace } from '../../../lsptoolshost/integrationTests/testAssets/testAssets'; const testAssetWorkspaces: { [x: string]: ITestAssetWorkspace } = { BasicRazorApp2_1, diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/README.md b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/README.md similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/README.md rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/README.md diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/UpdateTextMate.ps1 b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/UpdateTextMate.ps1 similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/UpdateTextMate.ps1 rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/UpdateTextMate.ps1 diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/__snapshots__/grammarTests.test.ts.snap b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/__snapshots__/grammarTests.test.ts.snap similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/__snapshots__/grammarTests.test.ts.snap rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/__snapshots__/grammarTests.test.ts.snap diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/addTagHelperDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/addTagHelperDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/addTagHelperDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/addTagHelperDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/attributeDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/attributeDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/attributeDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/attributeDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeBlock.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeBlock.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeBlock.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeBlock.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/codeDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/doStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/doStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/doStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/doStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/elsePart.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/elsePart.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/elsePart.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/elsePart.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressionInAttribute.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressionInAttribute.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressionInAttribute.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressionInAttribute.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressions.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressions.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressions.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/explicitExpressions.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/forStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/forStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/forStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/forStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/foreachStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/foreachStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/foreachStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/foreachStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/functionsDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/functionsDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/functionsDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/functionsDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/grammarTests.test.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/grammarTests.test.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/grammarTests.test.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/grammarTests.test.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/htmlDynamicAttribute.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/htmlDynamicAttribute.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/htmlDynamicAttribute.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/htmlDynamicAttribute.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/ifStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/ifStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/ifStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/ifStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implementsDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implementsDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implementsDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implementsDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressionInAttribute.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressionInAttribute.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressionInAttribute.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressionInAttribute.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressions.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressions.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressions.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/implicitExpressions.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/ITokenizedContent.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/ITokenizedContent.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/ITokenizedContent.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/ITokenizedContent.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/snapshotFactory.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/snapshotFactory.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/snapshotFactory.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/snapshotFactory.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/testUtilities.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/testUtilities.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/testUtilities.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/testUtilities.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts similarity index 86% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts index 61fe9432c..c04117bcb 100644 --- a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts +++ b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/infrastructure/tokenizedContentProvider.ts @@ -12,7 +12,7 @@ import { ITokenizedContent } from './ITokenizedContent'; let razorGrammarCache: IGrammar | undefined; const wasmBin = fs.readFileSync( - path.join(__dirname, '../../../../../node_modules/vscode-oniguruma/release/onig.wasm') + path.join(__dirname, '../../../../../../node_modules/vscode-oniguruma/release/onig.wasm') ).buffer; const vscodeOnigurumaLib = oniguruma.loadWASM(wasmBin).then(() => { return { @@ -80,16 +80,16 @@ async function loadRawGrammar(filePath: string) { async function getScopeToFilePathRegistry() { const razorRawGrammar = await loadRawGrammar('src/razor/syntaxes/aspnetcorerazor.tmLanguage.json'); const htmlRawGrammar = await loadRawGrammar( - 'test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json' + 'test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/html.tmLanguage.json' ); const cssRawGrammar = await loadRawGrammar( - 'test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json' + 'test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/css.tmLanguage.json' ); const javaScriptRawGrammar = await loadRawGrammar( - 'test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json' + 'test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/JavaScript.tmLanguage.json' ); const csharpRawGrammar = await loadRawGrammar( - 'test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json' + 'test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/embeddedGrammars/csharp.tmLanguage.json' ); const scopeToRawGrammarFilePath: { [key: string]: IRawGrammar } = { 'text.aspnetcorerazor': razorRawGrammar, diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/inheritsDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/inheritsDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/inheritsDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/inheritsDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/injectDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/injectDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/injectDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/injectDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/layoutDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/layoutDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/layoutDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/layoutDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/lockStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/lockStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/lockStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/lockStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/modelDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/modelDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/modelDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/modelDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/namespaceDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/namespaceDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/namespaceDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/namespaceDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/pageDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/pageDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/pageDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/pageDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/preservewhitespaceDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/preservewhitespaceDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/preservewhitespaceDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/preservewhitespaceDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorComment.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorComment.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorComment.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorComment.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorTemplate.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorTemplate.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorTemplate.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/razorTemplate.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/removeTagHelperDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/removeTagHelperDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/removeTagHelperDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/removeTagHelperDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/rendermodeDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/rendermodeDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/rendermodeDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/rendermodeDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/scriptBlock.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/scriptBlock.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/scriptBlock.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/scriptBlock.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/sectionDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/sectionDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/sectionDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/sectionDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/styleBlock.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/styleBlock.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/styleBlock.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/styleBlock.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/switchStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/switchStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/switchStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/switchStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tagHelperPrefixDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tagHelperPrefixDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tagHelperPrefixDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tagHelperPrefixDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/transitions.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/transitions.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/transitions.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/transitions.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tryStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tryStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tryStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/tryStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/typeparamDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/typeparamDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/typeparamDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/typeparamDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingDirective.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingDirective.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingDirective.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingDirective.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/usingStatement.ts diff --git a/test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/whileStatement.ts b/test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/whileStatement.ts similarity index 100% rename from test/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/whileStatement.ts rename to test/razor/razorTests/Microsoft.AspNetCore.Razor.VSCode.Grammar.Test/tests/whileStatement.ts diff --git a/test/razorTests/jest.config.ts b/test/razor/razorTests/jest.config.ts similarity index 94% rename from test/razorTests/jest.config.ts rename to test/razor/razorTests/jest.config.ts index 1d5497c95..3a24378f4 100644 --- a/test/razorTests/jest.config.ts +++ b/test/razor/razorTests/jest.config.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import type { Config } from 'jest'; -import { baseProjectConfig } from '../../baseJestConfig'; +import { baseProjectConfig } from '../../../baseJestConfig'; export const razorTestProjectName = 'Razor Unit Tests'; diff --git a/test/integrationTests/jestSetup/vsCodeEnvironment.ts b/test/vsCodeEnvironment.ts similarity index 100% rename from test/integrationTests/jestSetup/vsCodeEnvironment.ts rename to test/vsCodeEnvironment.ts diff --git a/test/integrationTests/jestSetup/vsCodeFramework.ts b/test/vsCodeFramework.ts similarity index 100% rename from test/integrationTests/jestSetup/vsCodeFramework.ts rename to test/vsCodeFramework.ts diff --git a/wallaby.js b/wallaby.js index 896b1f45e..2f854e80b 100644 --- a/wallaby.js +++ b/wallaby.js @@ -6,10 +6,10 @@ module.exports = function(_wallaby) { files: [ "src/**/*.ts*", "src/**/*.css", - "omnisharptest/omnisharpUnitTests/**/*.ts*", - "!omnisharptest/omnisharpUnitTests/**/*.test.ts*" + "test/omnisharp/omnisharpUnitTests/**/*.ts*", + "!test/omnisharp/omnisharpUnitTests/**/*.test.ts*" ], - tests: ["omnisharptest/omnisharpUnitTests/**/*.test.ts*"], + tests: ["test/omnisharp/omnisharpUnitTests/**/*.test.ts*"], debug: true, From 945301d71e86826e7af8072c640621c31617d8c1 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 6 Sep 2024 21:37:21 -0700 Subject: [PATCH 045/100] Delete omnisharptest testassets folder --- .../testAssets/singleCsproj/.gitignore | 2 - .../omnisharp_lsp_singleCsproj.code-workspace | 13 ----- .../omnisharp_singleCsproj.code-workspace | 13 ----- .../testAssets/singleCsproj/A.cs | 1 - .../testAssets/singleCsproj/DocComments.cs | 13 ----- .../testAssets/singleCsproj/ISomeInterface.cs | 6 -- .../testAssets/singleCsproj/Program.cs | 12 ---- .../singleCsproj/SomeInterfaceImpl.cs | 6 -- .../testAssets/singleCsproj/completion.cs | 14 ----- .../testAssets/singleCsproj/completionBase.cs | 14 ----- .../testAssets/singleCsproj/definition.cs | 16 ------ .../testAssets/singleCsproj/diagnostics.cs | 12 ---- .../singleCsproj/documentSymbols.cs | 57 ------------------- .../testAssets/singleCsproj/hover.cs | 16 ------ .../testAssets/singleCsproj/implementation.cs | 7 --- .../testAssets/singleCsproj/inlayHints.cs | 29 ---------- .../testAssets/singleCsproj/reference.cs | 17 ------ .../testAssets/singleCsproj/remap.cs | 12 ---- .../testAssets/singleCsproj/remapped.txt | 1 - .../singleCsproj/secondaryDiagnostics.cs | 12 ---- .../testAssets/singleCsproj/semantictokens.cs | 11 ---- .../testAssets/singleCsproj/sigHelp.cs | 23 -------- .../singleCsproj/singleCsproj.csproj | 8 --- .../testAssets/singleCsproj/typeDefinition.cs | 24 -------- 24 files changed, 339 deletions(-) delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.gitignore delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/A.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/DocComments.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/ISomeInterface.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/SomeInterfaceImpl.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completion.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completionBase.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/definition.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/diagnostics.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/documentSymbols.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/hover.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/implementation.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/inlayHints.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/reference.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remap.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remapped.txt delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/secondaryDiagnostics.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/semantictokens.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/sigHelp.cs delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj delete mode 100644 omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/typeDefinition.cs diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.gitignore b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.gitignore deleted file mode 100644 index 3d2ce4e89..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -**/obj/ -**/bin/ \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace deleted file mode 100644 index d2bbe1696..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace +++ /dev/null @@ -1,13 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "omnisharp.path": "latest", - "omnisharp.enableRoslynAnalyzers": true, - "omnisharp.enableLspDriver": true, - "dotnet.server.useOmnisharp": true - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace deleted file mode 100644 index 8bce15410..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace +++ /dev/null @@ -1,13 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "omnisharp.path": "latest", - "omnisharp.enableRoslynAnalyzers": true, - "omnisharp.enableLspDriver": false, - "dotnet.server.useOmnisharp": true - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/A.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/A.cs deleted file mode 100644 index f9822136b..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/A.cs +++ /dev/null @@ -1 +0,0 @@ -class C {} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/DocComments.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/DocComments.cs deleted file mode 100644 index fc321b3c4..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/DocComments.cs +++ /dev/null @@ -1,13 +0,0 @@ -class DocComments -{ - /// - string M(int param1, string param2) - { - return null; - } - - /// - - /// - void M2() {} -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/ISomeInterface.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/ISomeInterface.cs deleted file mode 100644 index 4c2da47f4..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/ISomeInterface.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace ReAnalyze -{ - public interface ISomeInterface - { - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs deleted file mode 100644 index f85e90a38..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/Program.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace singleCsproj -{ - class Program - { - static void Main(string[] args) - { - Console.WriteLine("Hello World!"); - } - } -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/SomeInterfaceImpl.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/SomeInterfaceImpl.cs deleted file mode 100644 index ce6b9fa31..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/SomeInterfaceImpl.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace ReAnalyze -{ - public class SomeInterfaceImpl: ISomeInterface - { - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completion.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completion.cs deleted file mode 100644 index ef6fcad72..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completion.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace singleCsproj -{ - class Completion : CompletionBase - { - static void shouldHaveCompletions(string[] args) - { - Completion a = new Completion(); - } - - // override // Trailing space is intentional - } -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completionBase.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completionBase.cs deleted file mode 100644 index c949da134..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/completionBase.cs +++ /dev/null @@ -1,14 +0,0 @@ -using singleCsproj2; - -namespace singleCsproj -{ - class CompletionBase - { - public virtual void Method(NeedsImport n) {} - } -} - -namespace singleCsproj2 -{ - class NeedsImport {} -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/definition.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/definition.cs deleted file mode 100644 index eac709c0c..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/definition.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace Test -{ - public partial class Definition - { - public static string Foo { get; set; } - - public void MyMethod() - { - Console.WriteLine(Foo); - } - } - - public partial class Definition { } -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/diagnostics.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/diagnostics.cs deleted file mode 100644 index 3f932c92e..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/diagnostics.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.IO; - -namespace Foo -{ - public class FooBar - { - public void FooBarBar() - { - var notUsed = 3; - } - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/documentSymbols.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/documentSymbols.cs deleted file mode 100644 index 74a5c3f09..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/documentSymbols.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; - -namespace Test -{ - class C - { - private int _f; - private int _f1, _f2; - - public C() {} - ~C() { } - - public void M1(int i, string s, params object[] args) - { - } - - public int P1 => 42; - public int P2 { get => 42; } - public int P3 { get { return 42; } } - - public int this[int index] => index++; - - public event EventHandler E1; - public event EventHandler E2, E3; - public event EventHandler E4 - { - add { } - remove { } - } - - public static bool operator ==(C c1, int i) { return true; } - - public static bool operator !=(C c1, int i) { return false; } - - public static implicit operator C(int i) { return null; } - - public static explicit operator int(C c1) { return 42 ; } - } - - struct S - { - } - - interface I - { - void M(); - } - - delegate void D(); - - enum E - { - One, - Two, - Three - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/hover.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/hover.cs deleted file mode 100644 index cbfc3d9d3..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/hover.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -namespace Test -{ - class testissue - { - ///Checks if object is tagged with the tag. - /// The game object. - /// Name of the tag. - /// Returns true if object is tagged with tag. - - public static bool Compare(int gameObject,string tagName) - { - return true; - } - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/implementation.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/implementation.cs deleted file mode 100644 index abddb3511..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/implementation.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace minimal -{ - public class BaseClass {} - public class SomeClass : BaseClass {} -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/inlayHints.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/inlayHints.cs deleted file mode 100644 index c34ad62dc..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/inlayHints.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -class InlayHints -{ - public void M() - { - var l1 = new InlayHints(); - InlayHints l2 = new(); - Action a = (s) => { }; - _ = this[1]; - _ = M1(1); - _ = new InlayHints(1); - _ = M2(1, 2); // No hint here, suppressForParametersThatDifferOnlyBySuffix - - int param1 = 1; - _ = M1(param1); // No hint here, suppressForParametersThatMatchArgumentName - - _ = EnableM(true); // No hint here, suppressForParametersThatMatchMethodIntent - } - - public void M1(int param1) { } - public void M2(int param1, int param2) { } - public void EnableM(bool enable) { } - - public int this[int i] { get { return 0; } set { } } - - public InlayHints() {} - public InlayHints(int param1) {} -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/reference.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/reference.cs deleted file mode 100644 index 92737c378..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/reference.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace minimal -{ - public class Foo - { - public void Baz() {} - } - - public class Bar - { - public Bar() - { - new Foo().Baz(); - } - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remap.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remap.cs deleted file mode 100644 index b98e0f136..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remap.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Remap -{ - public class Foo - { - public static string Bar { get; set; } - - public void Baz() - { - var x = nameof(Bar); - } - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remapped.txt b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remapped.txt deleted file mode 100644 index 5e1c309da..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/remapped.txt +++ /dev/null @@ -1 +0,0 @@ -Hello World \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/secondaryDiagnostics.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/secondaryDiagnostics.cs deleted file mode 100644 index 1a866d573..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/secondaryDiagnostics.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.IO; - -namespace Foo -{ - public class SecondaryDiagnostics - { - public void FooBarBar() - { - var notUsed = 3; - } - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/semantictokens.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/semantictokens.cs deleted file mode 100644 index 055b674b5..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/semantictokens.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Test -{ - public class TestProgram - { - public static int TestMain(string[] args) - { - System.Console.WriteLine(string.Join(',', args)); - return 0; - } - } -} diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/sigHelp.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/sigHelp.cs deleted file mode 100644 index 811e90f8c..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/sigHelp.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -namespace Test -{ - class sigHelp - { - ///DoWork is some method. - /// Used to indicate status. - /// Used to specify context. - public static void DoWork(int Int1, float Float1, double Double1) - { - } - - public static void noDocMethod() - { - } - - public static void main() - { - DoWork(4, 4.0f, 5.0); - noDocMethod(); - } - } -} \ No newline at end of file diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj deleted file mode 100644 index c73e0d169..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/singleCsproj.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - Exe - netcoreapp3.1 - - - diff --git a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/typeDefinition.cs b/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/typeDefinition.cs deleted file mode 100644 index addee4fde..000000000 --- a/omnisharptest/omnisharpIntegrationTests/testAssets/singleCsproj/typeDefinition.cs +++ /dev/null @@ -1,24 +0,0 @@ - -using System; - -namespace Test -{ - public class LinkedList - { - public void MyMethod() - { - var linked = new LinkedList(); - var str = "test string"; - var part = new PartialClass(); - Console.WriteLine(str); - } - } - - public partial class PartialClass { - public string Foo {get; set;}; - } - - public partial class PartialClass { - public int Bar {get; set;} - } -} From 648c50f76419464045aebbeba95767f66e6d2cda Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 6 Sep 2024 23:41:18 -0700 Subject: [PATCH 046/100] Split shared logging events into a separate class --- l10n/bundle.l10n.json | 18 +-- src/coreclrDebug/activate.ts | 4 +- src/eventStream.ts | 2 +- src/installRuntimeDependencies.ts | 2 +- src/main.ts | 24 +--- src/omnisharp/engines/lspEngine.ts | 2 +- src/omnisharp/engines/stdioEngine.ts | 2 +- src/omnisharp/features/commands.ts | 2 +- src/omnisharp/features/dotnetTest.ts | 2 +- .../features/virtualDocumentTracker.ts | 2 +- .../backgroundWorkStatusBarObserver.ts | 5 +- .../observers/baseStatusBarItemObserver.ts | 2 +- .../observers/csharpLoggerObserver.ts | 31 +++++ .../observers/dotnetChannelObserver.ts | 4 +- .../observers/dotnetLoggerObserver.ts | 6 +- .../observers/dotnetTestChannelObserver.ts | 4 +- .../observers/dotnetTestLoggerObserver.ts | 6 +- .../observers/errorMessageObserver.ts | 13 +- .../observers/informationMessageObserver.ts | 6 +- .../observers/omnisharpChannelObserver.ts | 4 +- .../omnisharpDebugModeLoggerObserver.ts | 6 +- .../observers/omnisharpLoggerObserver.ts | 6 +- .../observers/omnisharpStatusBarObserver.ts | 11 +- .../observers/projectStatusBarObserver.ts | 5 +- .../observers/razorLoggerObserver.ts | 5 +- src/omnisharp/observers/telemetryObserver.ts | 7 +- .../observers/warningMessageObserver.ts | 7 +- src/omnisharp/omnisharpDownloader.ts | 4 +- src/omnisharp/omnisharpLanguageServer.ts | 33 ++++- ...ingEvents.ts => omnisharpLoggingEvents.ts} | 118 ++++-------------- ...isharpWorkspaceDebugInformationProvider.ts | 10 +- src/omnisharp/requestQueue.ts | 2 +- src/omnisharp/server.ts | 2 +- .../downloadAndInstallPackages.ts | 4 +- src/packageManager/fileDownloader.ts | 2 +- src/packageManager/isValidDownload.ts | 2 +- src/packageManager/zipInstaller.ts | 2 +- src/razor/razorOmnisharpDownloader.ts | 2 +- .../blazorDebugConfigurationProvider.ts | 2 +- src/shared/configurationProvider.ts | 2 +- src/{omnisharp => shared}/eventType.ts | 0 src/shared/loggingEvents.ts | 106 ++++++++++++++++ src/shared/observers/baseChannelObserver.ts | 2 +- src/shared/observers/baseLoggerObserver.ts | 2 +- src/shared/observers/csharpChannelObserver.ts | 4 +- src/shared/observers/csharpLoggerObserver.ts | 19 +-- .../observers/utils/messageItemWithCommand.ts | 0 .../observers/utils/showErrorMessage.ts | 0 .../observers/utils/showInformationMessage.ts | 2 +- .../observers/utils/showWarningMessage.ts | 0 .../features => shared}/processPicker.ts | 4 +- src/tools/updatePackageDependencies.ts | 4 +- test/fakes.ts | 48 ++++--- .../unitTests}/csharpChannelObserver.test.ts | 12 +- .../unitTests}/csharpLoggerObserver.test.ts | 18 +-- .../dotnetTest.integration.test.ts | 4 +- .../integrationHelpers.ts | 2 +- .../reAnalyze.integration.test.ts | 5 +- .../testAssets/omnisharpTestAssetWorkspace.ts | 4 +- .../backgroundWorkStatusBarObserver.test.ts | 2 +- .../logging/dotnetChannelObserver.test.ts | 2 +- .../logging/dotnetLoggerObserver.test.ts | 6 +- .../logging/dotnetTestChannelObserver.test.ts | 12 +- .../logging/dotnetTestLoggerObserver.test.ts | 23 ++-- .../logging/errorMessageObserver.test.ts | 9 +- .../logging/omnisharpChannelObserver.test.ts | 8 +- .../omnisharpDebugModeLoggerObserver.test.ts | 14 +-- .../logging/omnisharpLoggerObserver.test.ts | 4 +- .../omnisharpStatusBarObserver.test.ts | 14 ++- .../logging/projectStatusBarObserver.test.ts | 5 +- .../logging/razorLoggerObserver.test.ts | 2 +- .../logging/telemetryObserver.test.ts | 6 +- .../omnisharpDownloader.test.ts | 2 +- .../downloadAndInstallPackages.test.ts | 2 +- .../packages/fileDownloader.test.ts | 2 +- .../packages/zipInstaller.test.ts | 2 +- .../omnisharpUnitTests/processPicker.test.ts | 2 +- .../testAssets/testEventBus.ts | 2 +- 78 files changed, 389 insertions(+), 339 deletions(-) create mode 100644 src/omnisharp/observers/csharpLoggerObserver.ts rename src/omnisharp/{loggingEvents.ts => omnisharpLoggingEvents.ts} (77%) rename src/{ => omnisharp}/omnisharpWorkspaceDebugInformationProvider.ts (90%) rename src/{omnisharp => shared}/eventType.ts (100%) create mode 100644 src/shared/loggingEvents.ts rename src/{omnisharp => shared}/observers/utils/messageItemWithCommand.ts (100%) rename src/{omnisharp => shared}/observers/utils/showErrorMessage.ts (100%) rename src/{omnisharp => shared}/observers/utils/showWarningMessage.ts (100%) rename src/{omnisharp/features => shared}/processPicker.ts (99%) rename test/{omnisharp/omnisharpUnitTests/logging => lsptoolshost/unitTests}/csharpChannelObserver.test.ts (84%) rename test/{omnisharp/omnisharpUnitTests/logging => lsptoolshost/unitTests}/csharpLoggerObserver.test.ts (93%) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index cb6615ec5..d665bdbbd 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -6,6 +6,15 @@ "Cannot create .NET debug configurations. The server is still initializing or has exited unexpectedly.": "Cannot create .NET debug configurations. The server is still initializing or has exited unexpectedly.", "Cannot create .NET debug configurations. The active C# project is not within folder '{0}'.": "Cannot create .NET debug configurations. The active C# project is not within folder '{0}'.", "Does not contain .NET Core projects.": "Does not contain .NET Core projects.", + "pipeArgs must be a string or a string array type": "pipeArgs must be a string or a string array type", + "Name not defined in current configuration.": "Name not defined in current configuration.", + "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.": "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.", + "Select the process to attach to": "Select the process to attach to", + "Pipe transport failed to get OS and processes.": "Pipe transport failed to get OS and processes.", + "Operating system \"{0}\" not supported.": "Operating system \"{0}\" not supported.", + "Transport attach could not obtain processes list.": "Transport attach could not obtain processes list.", + "Error Message: ": "Error Message: ", + "See {0} output": "See {0} output", "'{0}' was not set in the debug configuration.": "'{0}' was not set in the debug configuration.", "'{0}' request is not supported for the '{1}' configuration.": "'{0}' request is not supported for the '{1}' configuration.", "'{0}' was not provided in the debug configuration.": "'{0}' was not provided in the debug configuration.", @@ -143,15 +152,6 @@ "Package {0} download from {1} failed integrity check. Some features may not work as expected. Please restart Visual Studio Code to retrigger the download": "Package {0} download from {1} failed integrity check. Some features may not work as expected. Please restart Visual Studio Code to retrigger the download", "Failed to run test: {0}": "Failed to run test: {0}", "Failed to start debugger: {0}": "Failed to start debugger: {0}", - "pipeArgs must be a string or a string array type": "pipeArgs must be a string or a string array type", - "Name not defined in current configuration.": "Name not defined in current configuration.", - "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.": "Configuration \"{0}\" in launch.json does not have a {1} argument with {2} for remote process listing.", - "Select the process to attach to": "Select the process to attach to", - "Pipe transport failed to get OS and processes.": "Pipe transport failed to get OS and processes.", - "Operating system \"{0}\" not supported.": "Operating system \"{0}\" not supported.", - "Transport attach could not obtain processes list.": "Transport attach could not obtain processes list.", - "Error Message: ": "Error Message: ", - "See {0} output": "See {0} output", "Text editor must be focused to fix all issues": "Text editor must be focused to fix all issues", "Fix all issues": "Fix all issues", "Select fix all action": "Select fix all action", diff --git a/src/coreclrDebug/activate.ts b/src/coreclrDebug/activate.ts index b9a03a83f..31f9c7513 100644 --- a/src/coreclrDebug/activate.ts +++ b/src/coreclrDebug/activate.ts @@ -12,11 +12,11 @@ import { DebuggerPrerequisiteWarning, DebuggerPrerequisiteFailure, DebuggerNotInstalledFailure, -} from '../omnisharp/loggingEvents'; +} from '../shared/loggingEvents'; import { EventStream } from '../eventStream'; import { getRuntimeDependencyPackageWithId } from '../tools/runtimeDependencyPackageUtils'; import { getDotnetInfo } from '../shared/utils/getDotnetInfo'; -import { RemoteAttachPicker } from '../omnisharp/features/processPicker'; +import { RemoteAttachPicker } from '../shared/processPicker'; import CompositeDisposable from '../compositeDisposable'; import { BaseVsDbgConfigurationProvider } from '../shared/configurationProvider'; import { omnisharpOptions } from '../shared/options'; diff --git a/src/eventStream.ts b/src/eventStream.ts index c514bfd11..946370b93 100644 --- a/src/eventStream.ts +++ b/src/eventStream.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Subject, Subscription } from 'rxjs'; -import { BaseEvent } from './omnisharp/loggingEvents'; +import { BaseEvent } from './shared/loggingEvents'; export class EventStream { private sink: Subject; diff --git a/src/installRuntimeDependencies.ts b/src/installRuntimeDependencies.ts index f271768ac..7218d6c93 100644 --- a/src/installRuntimeDependencies.ts +++ b/src/installRuntimeDependencies.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { PlatformInformation } from './shared/platform'; -import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from './omnisharp/loggingEvents'; +import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from './shared/loggingEvents'; import { EventStream } from './eventStream'; import { getRuntimeDependenciesPackages } from './tools/runtimeDependencyPackageUtils'; import { getAbsolutePathPackagesToInstall } from './packageManager/getAbsolutePathPackagesToInstall'; diff --git a/src/main.ts b/src/main.ts index 858e84240..7e84e9f10 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,12 +7,11 @@ import * as coreclrdebug from './coreclrDebug/activate'; import * as util from './common'; import * as vscode from 'vscode'; -import { ActivationFailure, ActiveTextEditorChanged } from './omnisharp/loggingEvents'; +import { ActivationFailure } from './shared/loggingEvents'; import { CsharpChannelObserver } from './shared/observers/csharpChannelObserver'; import { CsharpLoggerObserver } from './shared/observers/csharpLoggerObserver'; import { EventStream } from './eventStream'; import { PlatformInformation } from './shared/platform'; -import { TelemetryObserver } from './omnisharp/observers/telemetryObserver'; import TelemetryReporter from '@vscode/extension-telemetry'; import { vscodeNetworkSettingsProvider } from './networkSettings'; import createOptionStream from './shared/observables/createOptionStream'; @@ -33,7 +32,6 @@ import { CSharpExtensionExports, OmnisharpExtensionExports } from './csharpExten import { csharpDevkitExtensionId, getCSharpDevKit } from './utils/getCSharpDevKit'; import { BlazorDebugConfigurationProvider } from './razor/src/blazorDebug/blazorDebugConfigurationProvider'; import { RoslynLanguageServerExport } from './lsptoolshost/roslynLanguageServerExportChannel'; -import { registerOmnisharpOptionChanges } from './omnisharp/omnisharpOptionChanges'; import { RoslynLanguageServerEvents } from './lsptoolshost/languageServerEvents'; import { ServerState } from './lsptoolshost/serverStateChange'; import { SolutionSnapshotProvider } from './lsptoolshost/services/solutionSnapshotProvider'; @@ -87,12 +85,8 @@ export async function activate( // If the dotnet bundle is installed, this will ensure the dotnet CLI is on the path. await initializeDotnetPath(); - const useModernNetOption = omnisharpOptions.useModernNet; - const telemetryObserver = new TelemetryObserver(platformInfo, () => reporter, useModernNetOption); - eventStream.subscribe(telemetryObserver.post); - const networkSettingsProvider = vscodeNetworkSettingsProvider(vscode); - const useFramework = useOmnisharpServer && useModernNetOption !== true; + const useFramework = useOmnisharpServer && omnisharpOptions.useModernNet !== true; const installDependencies: IInstallDependencies = async (dependencies: AbsolutePathPackage[]) => downloadAndInstallPackages(dependencies, networkSettingsProvider, eventStream, isValidDownload); const runtimeDependenciesExist = await ensureRuntimeDependencies( @@ -156,19 +150,13 @@ export async function activate( omnisharpLangServicePromise = activateOmniSharpLanguageServer( context, platformInfo, + optionStream, networkSettingsProvider, eventStream, csharpChannel, dotnetTestChannel, - dotnetChannel - ); - - context.subscriptions.push(registerOmnisharpOptionChanges(optionStream)); - - context.subscriptions.push( - vscode.window.onDidChangeActiveTextEditor(() => { - eventStream.post(new ActiveTextEditorChanged()); - }) + dotnetChannel, + reporter ); if (!razorOptions.razorDevMode) { @@ -198,7 +186,7 @@ export async function activate( await vscode.window.showErrorMessage(errorMessage, setupButton).then((selectedItem) => { if (selectedItem === setupButton) { const remoteDebugInfoURL = - 'https://github.com/OmniSharp/omnisharp-vscode/wiki/Remote-Debugging-On-Linux-Arm'; + 'https://github.com/dotnet/vscode-csharp/wiki/Remote-Debugging-On-Linux-Arm'; vscode.env.openExternal(vscode.Uri.parse(remoteDebugInfoURL)); } }); diff --git a/src/omnisharp/engines/lspEngine.ts b/src/omnisharp/engines/lspEngine.ts index 383d4f21c..1c2ec0e22 100644 --- a/src/omnisharp/engines/lspEngine.ts +++ b/src/omnisharp/engines/lspEngine.ts @@ -9,7 +9,7 @@ import { configure } from '../launcher'; import { LaunchTarget } from '../../shared/launchTarget'; import { EventEmitter } from 'events'; import { setTimeout } from 'timers'; -import * as ObservableEvents from '../loggingEvents'; +import * as ObservableEvents from '../omnisharpLoggingEvents'; import { EventStream } from '../../eventStream'; import CompositeDisposable from '../../compositeDisposable'; import Disposable from '../../disposable'; diff --git a/src/omnisharp/engines/stdioEngine.ts b/src/omnisharp/engines/stdioEngine.ts index 9eaf0332b..1fda3bcc3 100644 --- a/src/omnisharp/engines/stdioEngine.ts +++ b/src/omnisharp/engines/stdioEngine.ts @@ -15,7 +15,7 @@ import { omnisharpOptions } from '../../shared/options'; import { PlatformInformation } from '../../shared/platform'; import { launchOmniSharp } from '../launcher'; import { setTimeout } from 'timers'; -import * as ObservableEvents from '../loggingEvents'; +import * as ObservableEvents from '../omnisharpLoggingEvents'; import { EventStream } from '../../eventStream'; import CompositeDisposable from '../../compositeDisposable'; import Disposable from '../../disposable'; diff --git a/src/omnisharp/features/commands.ts b/src/omnisharp/features/commands.ts index 1d5525a20..bbffef58a 100644 --- a/src/omnisharp/features/commands.ts +++ b/src/omnisharp/features/commands.ts @@ -19,7 +19,7 @@ import { CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, CommandDotNetRestoreFailed, -} from '../loggingEvents'; +} from '../omnisharpLoggingEvents'; import { EventStream } from '../../eventStream'; import { PlatformInformation } from '../../shared/platform'; import CompositeDisposable from '../../compositeDisposable'; diff --git a/src/omnisharp/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts index 7d4ee6146..ebd3805d0 100644 --- a/src/omnisharp/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -28,7 +28,7 @@ import { DotNetTestDebugStartFailure, DotNetTestRunInContextStart, DotNetTestDebugInContextStart, -} from '../loggingEvents'; +} from '../omnisharpLoggingEvents'; import { EventStream } from '../../eventStream'; import LaunchConfiguration from './launchConfiguration'; import Disposable from '../../disposable'; diff --git a/src/omnisharp/features/virtualDocumentTracker.ts b/src/omnisharp/features/virtualDocumentTracker.ts index ef3ebf07d..b46cf9d16 100644 --- a/src/omnisharp/features/virtualDocumentTracker.ts +++ b/src/omnisharp/features/virtualDocumentTracker.ts @@ -10,7 +10,7 @@ import { FileChangeType } from '../protocol'; import { IDisposable } from '../../disposable'; import CompositeDisposable from '../../compositeDisposable'; import { EventStream } from '../../eventStream'; -import { DocumentSynchronizationFailure } from '../loggingEvents'; +import { DocumentSynchronizationFailure } from '../omnisharpLoggingEvents'; async function trackCurrentVirtualDocuments(server: OmniSharpServer, eventStream: EventStream) { for (let i = 0; i < workspace.textDocuments.length; i++) { diff --git a/src/omnisharp/observers/backgroundWorkStatusBarObserver.ts b/src/omnisharp/observers/backgroundWorkStatusBarObserver.ts index f250efe6c..36b69a2c4 100644 --- a/src/omnisharp/observers/backgroundWorkStatusBarObserver.ts +++ b/src/omnisharp/observers/backgroundWorkStatusBarObserver.ts @@ -4,8 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { BaseStatusBarItemObserver } from './baseStatusBarItemObserver'; -import { BaseEvent, OmnisharpBackgroundDiagnosticStatus } from '../loggingEvents'; -import { EventType } from '../eventType'; +import { BaseEvent } from '../../shared/loggingEvents'; +import { OmnisharpBackgroundDiagnosticStatus } from '../omnisharpLoggingEvents'; +import { EventType } from '../../shared/eventType'; import { BackgroundDiagnosticStatus } from '../protocol'; export class BackgroundWorkStatusBarObserver extends BaseStatusBarItemObserver { diff --git a/src/omnisharp/observers/baseStatusBarItemObserver.ts b/src/omnisharp/observers/baseStatusBarItemObserver.ts index a58b71fe8..03594675f 100644 --- a/src/omnisharp/observers/baseStatusBarItemObserver.ts +++ b/src/omnisharp/observers/baseStatusBarItemObserver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { BaseEvent } from '../../shared/loggingEvents'; import { StatusBarItem } from '../../vscodeAdapter'; -import { BaseEvent } from '../loggingEvents'; export abstract class BaseStatusBarItemObserver { constructor(private statusBarItem: StatusBarItem) {} diff --git a/src/omnisharp/observers/csharpLoggerObserver.ts b/src/omnisharp/observers/csharpLoggerObserver.ts new file mode 100644 index 000000000..c5ccbe252 --- /dev/null +++ b/src/omnisharp/observers/csharpLoggerObserver.ts @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; +import { EventType } from '../../shared/eventType'; +import { BaseEvent } from '../../shared/loggingEvents'; +import { DocumentSynchronizationFailure } from '../omnisharpLoggingEvents'; + +export class CSharpLoggerObserver extends BaseLoggerObserver { + public post = (event: BaseEvent) => { + switch (event.type) { + case EventType.ProjectJsonDeprecatedWarning: + this.logger.appendLine( + "Warning: project.json is no longer a supported project format for .NET Core applications. Update to the latest version of .NET Core (https://aka.ms/netcoredownload) and use 'dotnet migrate' to upgrade your project (see https://aka.ms/netcoremigrate for details)." + ); + break; + case EventType.DocumentSynchronizationFailure: + this.handleDocumentSynchronizationFailure(event); + break; + case EventType.LatestBuildDownloadStart: + this.logger.appendLine('Getting latest OmniSharp version information'); + break; + } + }; + + private handleDocumentSynchronizationFailure(event: DocumentSynchronizationFailure) { + this.logger.appendLine(`Failed to synchronize document '${event.documentPath}': ${event.errorMessage}`); + } +} diff --git a/src/omnisharp/observers/dotnetChannelObserver.ts b/src/omnisharp/observers/dotnetChannelObserver.ts index e4712481f..ec05783ae 100644 --- a/src/omnisharp/observers/dotnetChannelObserver.ts +++ b/src/omnisharp/observers/dotnetChannelObserver.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { BaseChannelObserver } from '../../shared/observers/baseChannelObserver'; -import { BaseEvent } from '../loggingEvents'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; +import { BaseEvent } from '../../shared/loggingEvents'; export class DotNetChannelObserver extends BaseChannelObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/dotnetLoggerObserver.ts b/src/omnisharp/observers/dotnetLoggerObserver.ts index 8b7d422fb..2fa1ad80e 100644 --- a/src/omnisharp/observers/dotnetLoggerObserver.ts +++ b/src/omnisharp/observers/dotnetLoggerObserver.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; +import { BaseEvent } from '../../shared/loggingEvents'; import { - BaseEvent, CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, CommandDotNetRestoreFailed, -} from '../loggingEvents'; -import { EventType } from '../eventType'; +} from '../omnisharpLoggingEvents'; +import { EventType } from '../../shared/eventType'; export class DotnetLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/dotnetTestChannelObserver.ts b/src/omnisharp/observers/dotnetTestChannelObserver.ts index fab4d0b65..eab8cd887 100644 --- a/src/omnisharp/observers/dotnetTestChannelObserver.ts +++ b/src/omnisharp/observers/dotnetTestChannelObserver.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { BaseChannelObserver } from '../../shared/observers/baseChannelObserver'; -import { BaseEvent } from '../loggingEvents'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; +import { BaseEvent } from '../../shared/loggingEvents'; export default class DotnetTestChannelObserver extends BaseChannelObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/dotnetTestLoggerObserver.ts b/src/omnisharp/observers/dotnetTestLoggerObserver.ts index 5a4e4f9ae..876f339a8 100644 --- a/src/omnisharp/observers/dotnetTestLoggerObserver.ts +++ b/src/omnisharp/observers/dotnetTestLoggerObserver.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { BaseEvent } from '../../shared/loggingEvents'; import { - BaseEvent, DotNetTestRunStart, DotNetTestMessage, ReportDotNetTestResults, @@ -15,10 +15,10 @@ import { DotNetTestsInClassRunStart, DotNetTestRunInContextStart, DotNetTestDebugInContextStart, -} from '../loggingEvents'; +} from '../omnisharpLoggingEvents'; import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; import * as protocol from '../protocol'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; export default class DotNetTestLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/errorMessageObserver.ts b/src/omnisharp/observers/errorMessageObserver.ts index 12aa1a848..410098aa0 100644 --- a/src/omnisharp/observers/errorMessageObserver.ts +++ b/src/omnisharp/observers/errorMessageObserver.ts @@ -3,16 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { - BaseEvent, - ZipError, - DotNetTestRunFailure, - DotNetTestDebugStartFailure, - IntegrityCheckFailure, -} from '../loggingEvents'; +import { BaseEvent, IntegrityCheckFailure, ZipError } from '../../shared/loggingEvents'; +import { DotNetTestRunFailure, DotNetTestDebugStartFailure } from '../omnisharpLoggingEvents'; import { vscode } from '../../vscodeAdapter'; -import showErrorMessage from './utils/showErrorMessage'; -import { EventType } from '../eventType'; +import showErrorMessage from '../../shared/observers/utils/showErrorMessage'; +import { EventType } from '../../shared/eventType'; import { l10n } from 'vscode'; export class ErrorMessageObserver { diff --git a/src/omnisharp/observers/informationMessageObserver.ts b/src/omnisharp/observers/informationMessageObserver.ts index 8cdc02590..24ef9ca34 100644 --- a/src/omnisharp/observers/informationMessageObserver.ts +++ b/src/omnisharp/observers/informationMessageObserver.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as ObservableEvent from '../loggingEvents'; import { vscode } from '../../vscodeAdapter'; import showInformationMessage from '../../shared/observers/utils/showInformationMessage'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; import { omnisharpOptions } from '../../shared/options'; import { l10n } from 'vscode'; +import { BaseEvent } from '../../shared/loggingEvents'; export class InformationMessageObserver { constructor(private vscode: vscode) {} - public post = (event: ObservableEvent.BaseEvent) => { + public post = (event: BaseEvent) => { switch (event.type) { case EventType.OmnisharpServerUnresolvedDependencies: this.handleOmnisharpServerUnresolvedDependencies(); diff --git a/src/omnisharp/observers/omnisharpChannelObserver.ts b/src/omnisharp/observers/omnisharpChannelObserver.ts index c60709fdf..e5f5b9c1b 100644 --- a/src/omnisharp/observers/omnisharpChannelObserver.ts +++ b/src/omnisharp/observers/omnisharpChannelObserver.ts @@ -5,9 +5,9 @@ import { BaseChannelObserver } from '../../shared/observers/baseChannelObserver'; import { OutputChannel } from '../../vscodeAdapter'; -import { BaseEvent } from '../loggingEvents'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; import { omnisharpOptions } from '../../shared/options'; +import { BaseEvent } from '../../shared/loggingEvents'; export class OmnisharpChannelObserver extends BaseChannelObserver { constructor(channel: OutputChannel) { diff --git a/src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts b/src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts index 8ddd0f9c4..7a2f0390d 100644 --- a/src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts +++ b/src/omnisharp/observers/omnisharpDebugModeLoggerObserver.ts @@ -5,8 +5,8 @@ import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; import * as os from 'os'; +import { BaseEvent } from '../../shared/loggingEvents'; import { - BaseEvent, OmnisharpRequestMessage, OmnisharpServerEnqueueRequest, OmnisharpServerDequeueRequest, @@ -14,8 +14,8 @@ import { OmnisharpServerVerboseMessage, OmnisharpServerProcessRequestStart, OmnisharpEventPacketReceived, -} from '../loggingEvents'; -import { EventType } from '../eventType'; +} from '../omnisharpLoggingEvents'; +import { EventType } from '../../shared/eventType'; export class OmnisharpDebugModeLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/omnisharpLoggerObserver.ts b/src/omnisharp/observers/omnisharpLoggerObserver.ts index 6eb82b334..a9153bd13 100644 --- a/src/omnisharp/observers/omnisharpLoggerObserver.ts +++ b/src/omnisharp/observers/omnisharpLoggerObserver.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; +import { BaseEvent } from '../../shared/loggingEvents'; import { - BaseEvent, OmnisharpInitialisation, OmnisharpLaunch, OmnisharpFailure, @@ -15,9 +15,9 @@ import { OmnisharpServerMsBuildProjectDiagnostics, OmnisharpServerOnStdErr, OmnisharpEventPacketReceived, -} from '../loggingEvents'; +} from '../omnisharpLoggingEvents'; import * as os from 'os'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; import * as vscode from 'vscode'; import { PlatformInformation } from '../../shared/platform'; import { Logger } from '../../logger'; diff --git a/src/omnisharp/observers/omnisharpStatusBarObserver.ts b/src/omnisharp/observers/omnisharpStatusBarObserver.ts index fe0af3a7b..a6218d57c 100644 --- a/src/omnisharp/observers/omnisharpStatusBarObserver.ts +++ b/src/omnisharp/observers/omnisharpStatusBarObserver.ts @@ -3,15 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { - BaseEvent, - DownloadStart, - InstallationStart, - DownloadProgress, - OmnisharpServerOnStdErr, -} from '../loggingEvents'; +import { BaseEvent, DownloadProgress, DownloadStart, InstallationStart } from '../../shared/loggingEvents'; +import { OmnisharpServerOnStdErr } from '../omnisharpLoggingEvents'; import { BaseStatusBarItemObserver } from './baseStatusBarItemObserver'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; export enum StatusBarColors { Red = 'rgb(218,0,0)', diff --git a/src/omnisharp/observers/projectStatusBarObserver.ts b/src/omnisharp/observers/projectStatusBarObserver.ts index 3c2db8439..b79167daa 100644 --- a/src/omnisharp/observers/projectStatusBarObserver.ts +++ b/src/omnisharp/observers/projectStatusBarObserver.ts @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import { basename } from 'path'; -import { BaseEvent, WorkspaceInformationUpdated } from '../loggingEvents'; +import { BaseEvent } from '../../shared/loggingEvents'; +import { WorkspaceInformationUpdated } from '../omnisharpLoggingEvents'; import { BaseStatusBarItemObserver } from './baseStatusBarItemObserver'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; export class ProjectStatusBarObserver extends BaseStatusBarItemObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/razorLoggerObserver.ts b/src/omnisharp/observers/razorLoggerObserver.ts index 212d6e4f7..b3d2321b0 100644 --- a/src/omnisharp/observers/razorLoggerObserver.ts +++ b/src/omnisharp/observers/razorLoggerObserver.ts @@ -4,8 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { BaseLoggerObserver } from '../../shared/observers/baseLoggerObserver'; -import { RazorPluginPathSpecified, BaseEvent, RazorPluginPathDoesNotExist } from '../loggingEvents'; -import { EventType } from '../eventType'; +import { RazorPluginPathSpecified, RazorPluginPathDoesNotExist } from '../omnisharpLoggingEvents'; +import { EventType } from '../../shared/eventType'; +import { BaseEvent } from '../../shared/loggingEvents'; export class RazorLoggerObserver extends BaseLoggerObserver { public post = (event: BaseEvent) => { diff --git a/src/omnisharp/observers/telemetryObserver.ts b/src/omnisharp/observers/telemetryObserver.ts index 15e1eefdd..a5477913a 100644 --- a/src/omnisharp/observers/telemetryObserver.ts +++ b/src/omnisharp/observers/telemetryObserver.ts @@ -4,18 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import { PlatformInformation } from '../../shared/platform'; +import { BaseEvent, InstallationFailure } from '../../shared/loggingEvents'; import { - BaseEvent, - InstallationFailure, TestExecutionCountReport, TelemetryEventWithMeasures, TelemetryEvent, ProjectConfiguration, TelemetryErrorEvent, OmnisharpInitialisation, -} from '../loggingEvents'; +} from '../omnisharpLoggingEvents'; import { PackageError } from '../../packageManager/packageError'; -import { EventType } from '../eventType'; +import { EventType } from '../../shared/eventType'; import { getDotnetInfo } from '../../shared/utils/getDotnetInfo'; import { DotnetInfo } from '../../shared/utils/dotnetInfo'; import { ITelemetryReporter, getTelemetryProps } from '../../shared/telemetryReporter'; diff --git a/src/omnisharp/observers/warningMessageObserver.ts b/src/omnisharp/observers/warningMessageObserver.ts index 5613cc28b..415554967 100644 --- a/src/omnisharp/observers/warningMessageObserver.ts +++ b/src/omnisharp/observers/warningMessageObserver.ts @@ -5,11 +5,12 @@ import { debounceTime } from 'rxjs/operators'; import { vscode } from '../../vscodeAdapter'; -import { BaseEvent, OmnisharpServerMsBuildProjectDiagnostics } from '../loggingEvents'; +import { BaseEvent } from '../../shared/loggingEvents'; +import { OmnisharpServerMsBuildProjectDiagnostics } from '../omnisharpLoggingEvents'; import { Scheduler, Subject } from 'rxjs'; -import showWarningMessage from './utils/showWarningMessage'; -import { EventType } from '../eventType'; +import showWarningMessage from '../../shared/observers/utils/showWarningMessage'; +import { EventType } from '../../shared/eventType'; import { l10n } from 'vscode'; export class WarningMessageObserver { diff --git a/src/omnisharp/omnisharpDownloader.ts b/src/omnisharp/omnisharpDownloader.ts index 5186403ea..03be20748 100644 --- a/src/omnisharp/omnisharpDownloader.ts +++ b/src/omnisharp/omnisharpDownloader.ts @@ -10,8 +10,7 @@ import { LogPlatformInfo, InstallationSuccess, InstallationFailure, - LatestBuildDownloadStart, -} from './loggingEvents'; +} from '../shared/loggingEvents'; import { EventStream } from '../eventStream'; import { NetworkSettingsProvider } from '../networkSettings'; import { downloadAndInstallPackages } from '../packageManager/downloadAndInstallPackages'; @@ -19,6 +18,7 @@ import { DownloadFile } from '../packageManager/fileDownloader'; import { getRuntimeDependenciesPackages } from '../tools/runtimeDependencyPackageUtils'; import { getAbsolutePathPackagesToInstall } from '../packageManager/getAbsolutePathPackagesToInstall'; import { isValidDownload } from '../packageManager/isValidDownload'; +import { LatestBuildDownloadStart } from './omnisharpLoggingEvents'; export class OmnisharpDownloader { public constructor( diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index 5fb478ee2..19aed0d44 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -32,14 +32,24 @@ import { LanguageMiddlewareFeature } from './languageMiddlewareFeature'; import { OmniSharpServer } from './server'; import { Advisor } from './features/diagnosticsProvider'; import TestManager from './features/dotnetTest'; -import { OmnisharpWorkspaceDebugInformationProvider } from '../omnisharpWorkspaceDebugInformationProvider'; +import { OmnisharpWorkspaceDebugInformationProvider } from './omnisharpWorkspaceDebugInformationProvider'; import Disposable from '../disposable'; import registerCommands from './features/commands'; import { addAssetsIfNecessary } from '../shared/assets'; -import { OmnisharpStart, ProjectJsonDeprecatedWarning, RazorDevModeActive } from './loggingEvents'; +import { + ActiveTextEditorChanged, + OmnisharpStart, + ProjectJsonDeprecatedWarning, + RazorDevModeActive, +} from './omnisharpLoggingEvents'; import { DotnetWorkspaceConfigurationProvider } from '../shared/workspaceConfigurationProvider'; import { getMonoVersion } from '../utils/getMonoVersion'; import { safeLength, sum } from '../common'; +import { TelemetryObserver } from './observers/telemetryObserver'; +import { ITelemetryReporter } from '../shared/telemetryReporter'; +import { Observable } from 'rxjs'; +import { registerOmnisharpOptionChanges } from './omnisharpOptionChanges'; +import { CSharpLoggerObserver } from './observers/csharpLoggerObserver'; export interface ActivationResult { readonly server: OmniSharpServer; @@ -50,15 +60,24 @@ export interface ActivationResult { export async function activateOmniSharpLanguageServer( context: vscode.ExtensionContext, platformInfo: PlatformInformation, + optionStream: Observable, networkSettingsProvider: NetworkSettingsProvider, eventStream: EventStream, csharpChannel: vscode.OutputChannel, dotnetTestChannel: vscode.OutputChannel, - dotnetChannel: vscode.OutputChannel + dotnetChannel: vscode.OutputChannel, + reporter: ITelemetryReporter ): Promise { // Set command enablement to use O# commands. vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'OmniSharp'); + const useModernNetOption = omnisharpOptions.useModernNet; + const telemetryObserver = new TelemetryObserver(platformInfo, () => reporter, useModernNetOption); + eventStream.subscribe(telemetryObserver.post); + + const csharpLoggerObserver = new CSharpLoggerObserver(csharpChannel); + eventStream.subscribe(csharpLoggerObserver.post); + const dotnetChannelObserver = new DotNetChannelObserver(dotnetChannel); const dotnetLoggerObserver = new DotnetLoggerObserver(dotnetChannel); eventStream.subscribe(dotnetChannelObserver.post); @@ -136,6 +155,14 @@ export async function activateOmniSharpLanguageServer( ); } + registerOmnisharpOptionChanges(optionStream); + + context.subscriptions.push( + vscode.window.onDidChangeActiveTextEditor(() => { + eventStream.post(new ActiveTextEditorChanged()); + }) + ); + // activate language services return activate( context, diff --git a/src/omnisharp/loggingEvents.ts b/src/omnisharp/omnisharpLoggingEvents.ts similarity index 77% rename from src/omnisharp/loggingEvents.ts rename to src/omnisharp/omnisharpLoggingEvents.ts index 0a6adf527..fc09d4bf7 100644 --- a/src/omnisharp/loggingEvents.ts +++ b/src/omnisharp/omnisharpLoggingEvents.ts @@ -3,16 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { PlatformInformation } from '../shared/platform'; import { Request } from './requestQueue'; import * as protocol from './protocol'; import { LaunchTarget } from '../shared/launchTarget'; -import { EventType } from './eventType'; +import { EventType } from '../shared/eventType'; import { ProjectConfigurationMessage } from '../shared/projectConfiguration'; - -export interface BaseEvent { - type: EventType; -} +import { BaseEvent, EventWithMessage } from '../shared/loggingEvents'; export class TelemetryEvent implements BaseEvent { type = EventType.TelemetryEvent; @@ -62,35 +58,6 @@ export class OmnisharpLaunch implements BaseEvent { ) {} } -export class PackageInstallStart implements BaseEvent { - type = EventType.PackageInstallStart; -} - -export class PackageInstallation implements BaseEvent { - type = EventType.PackageInstallation; - constructor(public packageInfo: string) {} -} - -export class LogPlatformInfo implements BaseEvent { - type = EventType.LogPlatformInfo; - constructor(public info: PlatformInformation) {} -} - -export class InstallationStart implements BaseEvent { - type = EventType.InstallationStart; - constructor(public packageDescription: string) {} -} - -export class InstallationFailure implements BaseEvent { - type = EventType.InstallationFailure; - constructor(public stage: string, public error: any) {} -} - -export class DownloadProgress implements BaseEvent { - type = EventType.DownloadProgress; - constructor(public downloadPercentage: number, public packageDescription: string) {} -} - export class OmnisharpFailure implements BaseEvent { type = EventType.OmnisharpFailure; constructor(public message: string, public error: Error) {} @@ -174,31 +141,6 @@ export class WorkspaceInformationUpdated implements BaseEvent { constructor(public info: protocol.WorkspaceInformationResponse) {} } -export class EventWithMessage implements BaseEvent { - type = EventType.EventWithMessage; - constructor(public message: string) {} -} - -export class DownloadStart implements BaseEvent { - type = EventType.DownloadStart; - constructor(public packageDescription: string) {} -} - -export class DownloadFallBack implements BaseEvent { - type = EventType.DownloadFallBack; - constructor(public fallbackUrl: string) {} -} - -export class DownloadSizeObtained implements BaseEvent { - type = EventType.DownloadSizeObtained; - constructor(public packageSize: number) {} -} - -export class ZipError implements BaseEvent { - type = EventType.ZipError; - constructor(public message: string) {} -} - export class ReportDotNetTestResults implements BaseEvent { type = EventType.ReportDotNetTestResults; constructor(public results: protocol.V2.DotNetTestResult[] | undefined) {} @@ -244,15 +186,6 @@ export class DocumentSynchronizationFailure implements BaseEvent { constructor(public documentPath: string, public errorMessage: string) {} } -export class IntegrityCheckFailure { - type = EventType.IntegrityCheckFailure; - constructor(public packageDescription: string, public url: string, public retry: boolean) {} -} - -export class IntegrityCheckSuccess { - type = EventType.IntegrityCheckSuccess; -} - export class RazorPluginPathSpecified implements BaseEvent { type = EventType.RazorPluginPathSpecified; constructor(public path: string) {} @@ -263,45 +196,42 @@ export class RazorPluginPathDoesNotExist implements BaseEvent { constructor(public path: string) {} } -export class DebuggerPrerequisiteFailure extends EventWithMessage { - type = EventType.DebuggerPrerequisiteFailure; -} -export class DebuggerPrerequisiteWarning extends EventWithMessage { - type = EventType.DebuggerPrerequisiteWarning; -} export class CommandDotNetRestoreProgress extends EventWithMessage { type = EventType.CommandDotNetRestoreProgress; } + export class CommandDotNetRestoreSucceeded extends EventWithMessage { type = EventType.CommandDotNetRestoreSucceeded; } + export class CommandDotNetRestoreFailed extends EventWithMessage { type = EventType.CommandDotNetRestoreFailed; } -export class DownloadSuccess extends EventWithMessage { - type = EventType.DownloadSuccess; -} -export class DownloadFailure extends EventWithMessage { - type = EventType.DownloadFailure; -} + export class OmnisharpServerOnStdErr extends EventWithMessage { type = EventType.OmnisharpServerOnStdErr; } + export class OmnisharpServerMessage extends EventWithMessage { type = EventType.OmnisharpServerMessage; } + export class OmnisharpServerVerboseMessage extends EventWithMessage { type = EventType.OmnisharpServerVerboseMessage; } + export class DotNetTestMessage extends EventWithMessage { type = EventType.DotNetTestMessage; } + export class DotNetTestRunFailure extends EventWithMessage { type = EventType.DotNetTestRunFailure; } + export class DotNetTestDebugWarning extends EventWithMessage { type = EventType.DotNetTestDebugWarning; } + export class DotNetTestDebugStartFailure extends EventWithMessage { type = EventType.DotNetTestDebugStartFailure; } @@ -309,57 +239,59 @@ export class DotNetTestDebugStartFailure extends EventWithMessage { export class RazorDevModeActive implements BaseEvent { type = EventType.RazorDevModeActive; } + export class ProjectModified implements BaseEvent { type = EventType.ProjectModified; } -export class ActivationFailure implements BaseEvent { - type = EventType.ActivationFailure; -} + export class ShowOmniSharpChannel implements BaseEvent { type = EventType.ShowOmniSharpChannel; } -export class DebuggerNotInstalledFailure implements BaseEvent { - type = EventType.DebuggerNotInstalledFailure; -} + export class CommandDotNetRestoreStart implements BaseEvent { type = EventType.CommandDotNetRestoreStart; } -export class InstallationSuccess implements BaseEvent { - type = EventType.InstallationSuccess; -} + export class OmnisharpServerProcessRequestComplete implements BaseEvent { type = EventType.OmnisharpServerProcessRequestComplete; } + export class ProjectJsonDeprecatedWarning implements BaseEvent { type = EventType.ProjectJsonDeprecatedWarning; } + export class OmnisharpOnBeforeServerStart implements BaseEvent { type = EventType.OmnisharpOnBeforeServerStart; } + export class OmnisharpOnBeforeServerInstall implements BaseEvent { type = EventType.OmnisharpOnBeforeServerInstall; } + export class ActiveTextEditorChanged implements BaseEvent { type = EventType.ActiveTextEditorChanged; } + export class OmnisharpServerOnStop implements BaseEvent { type = EventType.OmnisharpServerOnStop; } + export class OmnisharpServerOnStart implements BaseEvent { type = EventType.OmnisharpServerOnStart; } + export class LatestBuildDownloadStart implements BaseEvent { type = EventType.LatestBuildDownloadStart; } + export class OmnisharpRestart implements BaseEvent { type = EventType.OmnisharpRestart; } + export class DotNetTestDebugComplete implements BaseEvent { type = EventType.DotNetTestDebugComplete; } -export class DownloadValidation implements BaseEvent { - type = EventType.DownloadValidation; -} + export class ShowChannel implements BaseEvent { type = EventType.ShowChannel; } diff --git a/src/omnisharpWorkspaceDebugInformationProvider.ts b/src/omnisharp/omnisharpWorkspaceDebugInformationProvider.ts similarity index 90% rename from src/omnisharpWorkspaceDebugInformationProvider.ts rename to src/omnisharp/omnisharpWorkspaceDebugInformationProvider.ts index 76c035b0b..5d73c882c 100644 --- a/src/omnisharpWorkspaceDebugInformationProvider.ts +++ b/src/omnisharp/omnisharpWorkspaceDebugInformationProvider.ts @@ -4,15 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import * as path from 'path'; -import * as serverUtils from './omnisharp/utils'; +import * as serverUtils from './utils'; import { IWorkspaceDebugInformationProvider, ProjectDebugInformation, -} from './shared/IWorkspaceDebugInformationProvider'; -import { OmniSharpServer } from './omnisharp/server'; +} from '../shared/IWorkspaceDebugInformationProvider'; +import { OmniSharpServer } from './server'; import { Uri } from 'vscode'; -import { findNetCoreTargetFramework } from './shared/utils'; -import { isSubfolderOf } from './common'; +import { findNetCoreTargetFramework } from '../shared/utils'; +import { isSubfolderOf } from '../common'; export class OmnisharpWorkspaceDebugInformationProvider implements IWorkspaceDebugInformationProvider { constructor(private server: OmniSharpServer) {} diff --git a/src/omnisharp/requestQueue.ts b/src/omnisharp/requestQueue.ts index 15e32869b..d7f643908 100644 --- a/src/omnisharp/requestQueue.ts +++ b/src/omnisharp/requestQueue.ts @@ -9,7 +9,7 @@ import { OmnisharpServerProcessRequestStart, OmnisharpServerDequeueRequest, OmnisharpServerEnqueueRequest, -} from './loggingEvents'; +} from './omnisharpLoggingEvents'; import { EventStream } from '../eventStream'; export interface Request { diff --git a/src/omnisharp/server.ts b/src/omnisharp/server.ts index 7eccbeffc..1e19bb9e1 100644 --- a/src/omnisharp/server.ts +++ b/src/omnisharp/server.ts @@ -14,7 +14,7 @@ import { EventEmitter } from 'events'; import { OmnisharpManager } from './omnisharpManager'; import { PlatformInformation } from '../shared/platform'; import { OmnisharpDownloader } from './omnisharpDownloader'; -import * as ObservableEvents from './loggingEvents'; +import * as ObservableEvents from './omnisharpLoggingEvents'; import { EventStream } from '../eventStream'; import { NetworkSettingsProvider } from '../networkSettings'; import { Subject } from 'rxjs'; diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index 817bd73d7..d75aae2fa 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -11,9 +11,9 @@ import { EventStream } from '../eventStream'; import { NetworkSettingsProvider } from '../networkSettings'; import { AbsolutePathPackage } from './absolutePathPackage'; import { touchInstallFile, InstallFileType, deleteInstallFile, installFileExists } from '../common'; -import { InstallationFailure, IntegrityCheckFailure } from '../omnisharp/loggingEvents'; +import { InstallationFailure, IntegrityCheckFailure } from '../shared/loggingEvents'; import { mkdirpSync } from 'fs-extra'; -import { PackageInstallStart } from '../omnisharp/loggingEvents'; +import { PackageInstallStart } from '../shared/loggingEvents'; import { DownloadValidator } from './isValidDownload'; import { CancellationToken } from 'vscode'; diff --git a/src/packageManager/fileDownloader.ts b/src/packageManager/fileDownloader.ts index 2dcec511e..cea218574 100644 --- a/src/packageManager/fileDownloader.ts +++ b/src/packageManager/fileDownloader.ts @@ -12,7 +12,7 @@ import { DownloadFailure, DownloadProgress, DownloadSizeObtained, -} from '../omnisharp/loggingEvents'; +} from '../shared/loggingEvents'; import { NestedError } from '../nestedError'; import { parse as parseUrl } from 'url'; import { getProxyAgent } from './proxy'; diff --git a/src/packageManager/isValidDownload.ts b/src/packageManager/isValidDownload.ts index a74cb03d1..fd592395f 100644 --- a/src/packageManager/isValidDownload.ts +++ b/src/packageManager/isValidDownload.ts @@ -5,7 +5,7 @@ import * as crypto from 'crypto'; import { EventStream } from '../eventStream'; -import { IntegrityCheckSuccess, DownloadValidation } from '../omnisharp/loggingEvents'; +import { IntegrityCheckSuccess, DownloadValidation } from '../shared/loggingEvents'; export interface DownloadValidator { (buffer: Buffer, integrity: string | undefined, eventStream: EventStream): boolean; diff --git a/src/packageManager/zipInstaller.ts b/src/packageManager/zipInstaller.ts index ac3247aee..832d5b88f 100644 --- a/src/packageManager/zipInstaller.ts +++ b/src/packageManager/zipInstaller.ts @@ -8,7 +8,7 @@ import { mkdirp } from 'async-file'; import * as path from 'path'; import * as yauzl from 'yauzl'; import { EventStream } from '../eventStream'; -import { InstallationStart, ZipError } from '../omnisharp/loggingEvents'; +import { InstallationStart, ZipError } from '../shared/loggingEvents'; import { NestedError } from '../nestedError'; import { AbsolutePath } from './absolutePath'; diff --git a/src/razor/razorOmnisharpDownloader.ts b/src/razor/razorOmnisharpDownloader.ts index f249e7809..965f7cf99 100644 --- a/src/razor/razorOmnisharpDownloader.ts +++ b/src/razor/razorOmnisharpDownloader.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { PlatformInformation } from '../shared/platform'; -import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from '../omnisharp/loggingEvents'; +import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from '../shared/loggingEvents'; import { EventStream } from '../eventStream'; import { NetworkSettingsProvider } from '../networkSettings'; import { downloadAndInstallPackages } from '../packageManager/downloadAndInstallPackages'; diff --git a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts index beecd91d8..8c6e505b0 100644 --- a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts +++ b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts @@ -13,7 +13,7 @@ import { RazorLogger } from '../razorLogger'; import { JS_DEBUG_NAME, SERVER_APP_NAME } from './constants'; import { onDidTerminateDebugSession } from './terminateDebugHandler'; import showInformationMessage from '../../../shared/observers/utils/showInformationMessage'; -import showErrorMessage from '../../../omnisharp/observers/utils/showErrorMessage'; +import showErrorMessage from '../../../shared/observers/utils/showErrorMessage'; export class BlazorDebugConfigurationProvider implements vscode.DebugConfigurationProvider { private static readonly autoDetectUserNotice: string = vscode.l10n.t( diff --git a/src/shared/configurationProvider.ts b/src/shared/configurationProvider.ts index 08f1528ea..b223a93e3 100644 --- a/src/shared/configurationProvider.ts +++ b/src/shared/configurationProvider.ts @@ -14,7 +14,7 @@ import { RemoteAttachPicker, DotNetAttachItemsProviderFactory, AttachPicker, -} from '../omnisharp/features/processPicker'; +} from '../shared/processPicker'; import { PlatformInformation } from './platform'; import { getCSharpDevKit } from '../utils/getCSharpDevKit'; import { commonOptions } from './options'; diff --git a/src/omnisharp/eventType.ts b/src/shared/eventType.ts similarity index 100% rename from src/omnisharp/eventType.ts rename to src/shared/eventType.ts diff --git a/src/shared/loggingEvents.ts b/src/shared/loggingEvents.ts new file mode 100644 index 000000000..a34334e3a --- /dev/null +++ b/src/shared/loggingEvents.ts @@ -0,0 +1,106 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { EventType } from './eventType'; +import { PlatformInformation } from './platform'; + +export interface BaseEvent { + type: EventType; +} + +export class EventWithMessage implements BaseEvent { + type = EventType.EventWithMessage; + constructor(public message: string) {} +} + +export class ActivationFailure implements BaseEvent { + type = EventType.ActivationFailure; +} + +export class DebuggerPrerequisiteFailure extends EventWithMessage { + type = EventType.DebuggerPrerequisiteFailure; +} + +export class DebuggerPrerequisiteWarning extends EventWithMessage { + type = EventType.DebuggerPrerequisiteWarning; +} + +export class DebuggerNotInstalledFailure implements BaseEvent { + type = EventType.DebuggerNotInstalledFailure; +} + +export class PackageInstallStart implements BaseEvent { + type = EventType.PackageInstallStart; +} + +export class PackageInstallation implements BaseEvent { + type = EventType.PackageInstallation; + constructor(public packageInfo: string) {} +} + +export class LogPlatformInfo implements BaseEvent { + type = EventType.LogPlatformInfo; + constructor(public info: PlatformInformation) {} +} + +export class InstallationStart implements BaseEvent { + type = EventType.InstallationStart; + constructor(public packageDescription: string) {} +} + +export class InstallationSuccess implements BaseEvent { + type = EventType.InstallationSuccess; +} + +export class InstallationFailure implements BaseEvent { + type = EventType.InstallationFailure; + constructor(public stage: string, public error: any) {} +} + +export class DownloadStart implements BaseEvent { + type = EventType.DownloadStart; + constructor(public packageDescription: string) {} +} + +export class DownloadFallBack implements BaseEvent { + type = EventType.DownloadFallBack; + constructor(public fallbackUrl: string) {} +} + +export class DownloadSuccess extends EventWithMessage { + type = EventType.DownloadSuccess; +} + +export class DownloadFailure extends EventWithMessage { + type = EventType.DownloadFailure; +} + +export class DownloadSizeObtained implements BaseEvent { + type = EventType.DownloadSizeObtained; + constructor(public packageSize: number) {} +} + +export class DownloadProgress implements BaseEvent { + type = EventType.DownloadProgress; + constructor(public downloadPercentage: number, public packageDescription: string) {} +} + +export class DownloadValidation implements BaseEvent { + type = EventType.DownloadValidation; +} + +export class ZipError implements BaseEvent { + type = EventType.ZipError; + constructor(public message: string) {} +} + +export class IntegrityCheckFailure { + type = EventType.IntegrityCheckFailure; + constructor(public packageDescription: string, public url: string, public retry: boolean) {} +} + +export class IntegrityCheckSuccess { + type = EventType.IntegrityCheckSuccess; +} diff --git a/src/shared/observers/baseChannelObserver.ts b/src/shared/observers/baseChannelObserver.ts index 4a66600ae..1942129df 100644 --- a/src/shared/observers/baseChannelObserver.ts +++ b/src/shared/observers/baseChannelObserver.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from '../../vscodeAdapter'; -import { BaseEvent } from '../../omnisharp/loggingEvents'; +import { BaseEvent } from '../../shared/loggingEvents'; export abstract class BaseChannelObserver { constructor(private channel: vscode.OutputChannel) {} diff --git a/src/shared/observers/baseLoggerObserver.ts b/src/shared/observers/baseLoggerObserver.ts index 5f79b00f4..b6478572c 100644 --- a/src/shared/observers/baseLoggerObserver.ts +++ b/src/shared/observers/baseLoggerObserver.ts @@ -5,7 +5,7 @@ import * as vscode from '../../vscodeAdapter'; import { Logger } from '../../logger'; -import { BaseEvent } from '../../omnisharp/loggingEvents'; +import { BaseEvent } from '../../shared/loggingEvents'; export abstract class BaseLoggerObserver { public logger: Logger; diff --git a/src/shared/observers/csharpChannelObserver.ts b/src/shared/observers/csharpChannelObserver.ts index 836eca025..ccc96b39f 100644 --- a/src/shared/observers/csharpChannelObserver.ts +++ b/src/shared/observers/csharpChannelObserver.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { BaseChannelObserver } from './baseChannelObserver'; -import { EventType } from '../../omnisharp/eventType'; -import { BaseEvent } from '../../omnisharp/loggingEvents'; +import { EventType } from '../eventType'; +import { BaseEvent } from '../../shared/loggingEvents'; export class CsharpChannelObserver extends BaseChannelObserver { public post = (event: BaseEvent) => { diff --git a/src/shared/observers/csharpLoggerObserver.ts b/src/shared/observers/csharpLoggerObserver.ts index bddfb57e3..e70258621 100644 --- a/src/shared/observers/csharpLoggerObserver.ts +++ b/src/shared/observers/csharpLoggerObserver.ts @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { BaseLoggerObserver } from './baseLoggerObserver'; -import * as Event from '../../omnisharp/loggingEvents'; +import * as Event from '../../shared/loggingEvents'; import { PackageError } from '../../packageManager/packageError'; -import { EventType } from '../../omnisharp/eventType'; +import { EventType } from '../eventType'; export class CsharpLoggerObserver extends BaseLoggerObserver { private dots = 0; @@ -44,23 +44,12 @@ export class CsharpLoggerObserver extends BaseLoggerObserver { case EventType.DebuggerPrerequisiteWarning: this.handleEventWithMessage(event); break; - case EventType.ProjectJsonDeprecatedWarning: - this.logger.appendLine( - "Warning: project.json is no longer a supported project format for .NET Core applications. Update to the latest version of .NET Core (https://aka.ms/netcoredownload) and use 'dotnet migrate' to upgrade your project (see https://aka.ms/netcoremigrate for details)." - ); - break; case EventType.DownloadFallBack: this.handleDownloadFallback(event); break; case EventType.DownloadSizeObtained: this.handleDownloadSizeObtained(event); break; - case EventType.DocumentSynchronizationFailure: - this.handleDocumentSynchronizationFailure(event); - break; - case EventType.LatestBuildDownloadStart: - this.logger.appendLine('Getting latest OmniSharp version information'); - break; case EventType.IntegrityCheckFailure: this.handleIntegrityCheckFailure(event); break; @@ -143,8 +132,4 @@ export class CsharpLoggerObserver extends BaseLoggerObserver { this.logger.appendLine(`Installing package '${event.packageDescription}'`); this.logger.appendLine(); } - - private handleDocumentSynchronizationFailure(event: Event.DocumentSynchronizationFailure) { - this.logger.appendLine(`Failed to synchronize document '${event.documentPath}': ${event.errorMessage}`); - } } diff --git a/src/omnisharp/observers/utils/messageItemWithCommand.ts b/src/shared/observers/utils/messageItemWithCommand.ts similarity index 100% rename from src/omnisharp/observers/utils/messageItemWithCommand.ts rename to src/shared/observers/utils/messageItemWithCommand.ts diff --git a/src/omnisharp/observers/utils/showErrorMessage.ts b/src/shared/observers/utils/showErrorMessage.ts similarity index 100% rename from src/omnisharp/observers/utils/showErrorMessage.ts rename to src/shared/observers/utils/showErrorMessage.ts diff --git a/src/shared/observers/utils/showInformationMessage.ts b/src/shared/observers/utils/showInformationMessage.ts index 40931cbab..4d927f770 100644 --- a/src/shared/observers/utils/showInformationMessage.ts +++ b/src/shared/observers/utils/showInformationMessage.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { vscode } from '../../../vscodeAdapter'; -import MessageItemWithCommand from '../../../omnisharp/observers/utils/messageItemWithCommand'; +import MessageItemWithCommand from './messageItemWithCommand'; export default async function showInformationMessage( vscode: vscode, diff --git a/src/omnisharp/observers/utils/showWarningMessage.ts b/src/shared/observers/utils/showWarningMessage.ts similarity index 100% rename from src/omnisharp/observers/utils/showWarningMessage.ts rename to src/shared/observers/utils/showWarningMessage.ts diff --git a/src/omnisharp/features/processPicker.ts b/src/shared/processPicker.ts similarity index 99% rename from src/omnisharp/features/processPicker.ts rename to src/shared/processPicker.ts index 823ca3692..f049b7aa6 100644 --- a/src/omnisharp/features/processPicker.ts +++ b/src/shared/processPicker.ts @@ -9,8 +9,8 @@ import * as os from 'os'; import * as path from 'path'; import * as vscode from 'vscode'; -import { PlatformInformation } from '../../shared/platform'; -import { findPowerShell, getExtensionPath } from '../../common'; +import { PlatformInformation } from './platform'; +import { findPowerShell, getExtensionPath } from '../common'; export interface AttachItem extends vscode.QuickPickItem { id: string; diff --git a/src/tools/updatePackageDependencies.ts b/src/tools/updatePackageDependencies.ts index d93c7bd06..f62503abf 100644 --- a/src/tools/updatePackageDependencies.ts +++ b/src/tools/updatePackageDependencies.ts @@ -8,10 +8,10 @@ import * as os from 'os'; import { Package } from '../packageManager/package'; import { DownloadFile } from '../packageManager/fileDownloader'; import { EventStream } from '../eventStream'; -import * as Event from '../omnisharp/loggingEvents'; +import * as Event from '../shared/loggingEvents'; import NetworkSettings, { NetworkSettingsProvider } from '../networkSettings'; import { getBufferIntegrityHash } from '../packageManager/isValidDownload'; -import { EventType } from '../omnisharp/eventType'; +import { EventType } from '../shared/eventType'; interface PackageJSONFile { runtimeDependencies: Package[]; diff --git a/test/fakes.ts b/test/fakes.ts index 7f2b0424e..533a65bcc 100644 --- a/test/fakes.ts +++ b/test/fakes.ts @@ -6,14 +6,12 @@ import * as vscode from '../src/vscodeAdapter'; import * as protocol from '../src/omnisharp/protocol'; import { ITelemetryReporter } from '../src/shared/telemetryReporter'; -import { MSBuildDiagnosticsMessage } from '../src/omnisharp/protocol'; import { OmnisharpServerMsBuildProjectDiagnostics, OmnisharpServerOnError, OmnisharpServerUnresolvedDependencies, WorkspaceInformationUpdated, -} from '../src/omnisharp/loggingEvents'; -import * as vscodeAdapter from '../src/vscodeAdapter'; +} from '../src/omnisharp/omnisharpLoggingEvents'; export const getNullChannel = (): vscode.OutputChannel => { const returnChannel: vscode.OutputChannel = { @@ -87,8 +85,8 @@ export const getWorkspaceConfiguration = (): vscode.WorkspaceConfiguration => { export function getOmnisharpMSBuildProjectDiagnosticsEvent( fileName: string, - warnings: MSBuildDiagnosticsMessage[], - errors: MSBuildDiagnosticsMessage[] + warnings: protocol.MSBuildDiagnosticsMessage[], + errors: protocol.MSBuildDiagnosticsMessage[] ): OmnisharpServerMsBuildProjectDiagnostics { return new OmnisharpServerMsBuildProjectDiagnostics({ FileName: fileName, @@ -105,7 +103,7 @@ export function getMSBuildDiagnosticsMessage( startColumn: number, endLine: number, endColumn: number -): MSBuildDiagnosticsMessage { +): protocol.MSBuildDiagnosticsMessage { return { LogLevel: logLevel, FileName: fileName, @@ -138,7 +136,7 @@ export function getUnresolvedDependenices(fileName: string): OmnisharpServerUnre }); } -export function getFakeVsCode(): vscodeAdapter.vscode { +export function getFakeVsCode(): vscode.vscode { return { commands: { executeCommand: <_T>(_command: string, ..._rest: any[]) => { @@ -146,16 +144,16 @@ export function getFakeVsCode(): vscodeAdapter.vscode { }, }, languages: { - match: (_selector: vscodeAdapter.DocumentSelector, _document: vscodeAdapter.TextDocument) => { + match: (_selector: vscode.DocumentSelector, _document: vscode.TextDocument) => { throw new Error('Not Implemented'); }, }, window: { activeTextEditor: undefined, - showInformationMessage: (_message: string, ..._items: T[]) => { + showInformationMessage: (_message: string, ..._items: T[]) => { throw new Error('Not Implemented'); }, - showWarningMessage: (_message: string, ..._items: T[]) => { + showWarningMessage: (_message: string, ..._items: T[]) => { throw new Error('Not Implemented'); }, showErrorMessage: (_message: string, ..._items: string[]) => { @@ -164,14 +162,14 @@ export function getFakeVsCode(): vscodeAdapter.vscode { }, workspace: { workspaceFolders: undefined, - getConfiguration: (_section?: string, _resource?: vscodeAdapter.Uri) => { + getConfiguration: (_section?: string, _resource?: vscode.Uri) => { throw new Error('Not Implemented'); }, - asRelativePath: (_pathOrUri: string | vscodeAdapter.Uri, _includeWorkspaceFolder?: boolean) => { + asRelativePath: (_pathOrUri: string | vscode.Uri, _includeWorkspaceFolder?: boolean) => { throw new Error('Not Implemented'); }, createFileSystemWatcher: ( - _globPattern: vscodeAdapter.GlobPattern, + _globPattern: vscode.GlobPattern, _ignoreCreateEvents?: boolean, _ignoreChangeEvents?: boolean, _ignoreDeleteEvents?: boolean @@ -179,10 +177,10 @@ export function getFakeVsCode(): vscodeAdapter.vscode { throw new Error('Not Implemented'); }, onDidChangeConfiguration: ( - _listener: (e: vscodeAdapter.ConfigurationChangeEvent) => any, + _listener: (e: vscode.ConfigurationChangeEvent) => any, _thisArgs?: any, - _disposables?: vscodeAdapter.Disposable[] - ): vscodeAdapter.Disposable => { + _disposables?: vscode.Disposable[] + ): vscode.Disposable => { throw new Error('Not Implemented'); }, }, @@ -193,11 +191,11 @@ export function getFakeVsCode(): vscodeAdapter.vscode { parse: () => { throw new Error('Not Implemented'); }, - file: (f: string): vscodeAdapter.Uri => { + file: (f: string): vscode.Uri => { return { path: f, fsPath: f, - } as unknown as vscodeAdapter.Uri; + } as unknown as vscode.Uri; }, }, version: 'myVersion', @@ -285,18 +283,18 @@ export function getWorkspaceInformationUpdated( }); } -export function getVSCodeWithConfig(vscode: vscode.vscode = getFakeVsCode()) { - const _vscodeConfig = getWorkspaceConfiguration(); +export function getVSCodeWithConfig(vscodeAdapter: vscode.vscode = getFakeVsCode()) { + const _vscodeAdapterConfig = getWorkspaceConfiguration(); - vscode.workspace.getConfiguration = (_section, _resource) => { - return _vscodeConfig; + vscodeAdapter.workspace.getConfiguration = (_section, _resource) => { + return _vscodeAdapterConfig; }; - return vscode; + return vscodeAdapter; } -export function updateConfig(vscode: vscode.vscode, section: string | undefined, config: string, value: any) { - const workspaceConfig = vscode.workspace.getConfiguration(section); +export function updateConfig(vscodeAdapter: vscode.vscode, section: string | undefined, config: string, value: any) { + const workspaceConfig = vscodeAdapter.workspace.getConfiguration(section); const configEntry = section ? `${section}.${config}` : config; workspaceConfig.update(configEntry, value); } diff --git a/test/omnisharp/omnisharpUnitTests/logging/csharpChannelObserver.test.ts b/test/lsptoolshost/unitTests/csharpChannelObserver.test.ts similarity index 84% rename from test/omnisharp/omnisharpUnitTests/logging/csharpChannelObserver.test.ts rename to test/lsptoolshost/unitTests/csharpChannelObserver.test.ts index 29dae846c..722765e2c 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/csharpChannelObserver.test.ts +++ b/test/lsptoolshost/unitTests/csharpChannelObserver.test.ts @@ -4,24 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { getNullChannel } from '../../../fakes'; -import { CsharpChannelObserver } from '../../../../src/shared/observers/csharpChannelObserver'; +import { getNullChannel } from '../../fakes'; +import { CsharpChannelObserver } from '../../../src/shared/observers/csharpChannelObserver'; import { InstallationFailure, - DebuggerNotInstalledFailure, - DebuggerPrerequisiteFailure, - ProjectJsonDeprecatedWarning, BaseEvent, PackageInstallStart, IntegrityCheckFailure, -} from '../../../../src/omnisharp/loggingEvents'; + DebuggerNotInstalledFailure, + DebuggerPrerequisiteFailure, +} from '../../../src/shared/loggingEvents'; describe('CsharpChannelObserver', () => { [ new InstallationFailure('someStage', 'someError'), new DebuggerNotInstalledFailure(), new DebuggerPrerequisiteFailure('some failure'), - new ProjectJsonDeprecatedWarning(), new IntegrityCheckFailure('', '', true), new PackageInstallStart(), ].forEach((event: BaseEvent) => { diff --git a/test/omnisharp/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts b/test/lsptoolshost/unitTests/csharpLoggerObserver.test.ts similarity index 93% rename from test/omnisharp/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts rename to test/lsptoolshost/unitTests/csharpLoggerObserver.test.ts index 9e18d2451..f757ab824 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/csharpLoggerObserver.test.ts +++ b/test/lsptoolshost/unitTests/csharpLoggerObserver.test.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { getNullChannel } from '../../../fakes'; -import { CsharpLoggerObserver } from '../../../../src/shared/observers/csharpLoggerObserver'; -import { PlatformInformation } from '../../../../src/shared/platform'; -import * as Event from '../../../../src/omnisharp/loggingEvents'; -import { PackageError } from '../../../../src/packageManager/packageError'; -import { Package } from '../../../../src/packageManager/package'; +import { getNullChannel } from '../../fakes'; +import { CsharpLoggerObserver } from '../../../src/shared/observers/csharpLoggerObserver'; +import { PlatformInformation } from '../../../src/shared/platform'; +import { PackageError } from '../../../src/packageManager/packageError'; +import { Package } from '../../../src/packageManager/package'; +import * as Event from '../../../src/shared/loggingEvents'; describe('CsharpLoggerObserver', () => { let logOutput = ''; @@ -180,12 +180,6 @@ describe('CsharpLoggerObserver', () => { expect(logOutput).toBeTruthy(); }); - test(`ProjectJsonDeprecatedWarning: Some message is logged`, () => { - const event = new Event.ProjectJsonDeprecatedWarning(); - observer.post(event); - expect(logOutput).toBeTruthy(); - }); - test(`InstallationSuccess: Some message is logged`, () => { const event = new Event.InstallationSuccess(); observer.post(event); diff --git a/test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts index f4403473b..73a5b1724 100644 --- a/test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/dotnetTest.integration.test.ts @@ -9,8 +9,8 @@ import * as path from 'path'; import { activateCSharpExtension, describeIfSlnWithCsProj } from './integrationHelpers'; import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { EventStream } from '../../../src/eventStream'; -import { EventType } from '../../../src/omnisharp/eventType'; -import { OmnisharpRequestMessage } from '../../../src/omnisharp/loggingEvents'; +import { EventType } from '../../../src/shared/eventType'; +import { OmnisharpRequestMessage } from '../../../src/omnisharp/omnisharpLoggingEvents'; import { V2 } from '../../../src/omnisharp/protocol'; import { isNotNull } from '../testUtil'; diff --git a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 6d9290598..3c993287d 100644 --- a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -7,7 +7,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; import { Advisor } from '../../../src/omnisharp/features/diagnosticsProvider'; import { EventStream } from '../../../src/eventStream'; -import { EventType } from '../../../src/omnisharp/eventType'; +import { EventType } from '../../../src/shared/eventType'; import { OmnisharpExtensionExports } from '../../../src/csharpExtensionExports'; import { describe } from '@jest/globals'; diff --git a/test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts index d5a69c014..5cb975225 100644 --- a/test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/reAnalyze.integration.test.ts @@ -10,8 +10,9 @@ import { activateCSharpExtension, describeIfNotRazorOrGenerator } from './integr import testAssetWorkspace from './testAssets/activeTestAssetWorkspace'; import { poll, assertWithPoll } from './poll'; import { EventStream } from '../../../src/eventStream'; -import { EventType } from '../../../src/omnisharp/eventType'; -import { BaseEvent, OmnisharpBackgroundDiagnosticStatus } from '../../../src/omnisharp/loggingEvents'; +import { EventType } from '../../../src/shared/eventType'; +import { BaseEvent } from '../../../src/shared/loggingEvents'; +import { OmnisharpBackgroundDiagnosticStatus } from '../../../src/omnisharp/omnisharpLoggingEvents'; import { BackgroundDiagnosticStatus } from '../../../src/omnisharp/protocol'; function listenEvents(stream: EventStream, type: EventType): T[] { diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts b/test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts index 4d59aae62..e98b279d7 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/omnisharpTestAssetWorkspace.ts @@ -5,8 +5,8 @@ import * as vscode from 'vscode'; import { EventStream } from '../../../../src/eventStream'; -import { EventType } from '../../../../src/omnisharp/eventType'; -import { BaseEvent } from '../../../../src/omnisharp/loggingEvents'; +import { EventType } from '../../../../src/shared/eventType'; +import { BaseEvent } from '../../../../src/shared/loggingEvents'; import { poll } from '../poll'; import { ITestAssetWorkspace, TestAssetWorkspace } from '../../../lsptoolshost/integrationTests/testAssets/testAssets'; import { ActivationResult } from '../integrationHelpers'; diff --git a/test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts index d601af776..8d44d5f99 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/backgroundWorkStatusBarObserver.test.ts @@ -5,7 +5,7 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { StatusBarItem } from '../../../../src/vscodeAdapter'; -import { OmnisharpBackgroundDiagnosticStatus } from '../../../../src/omnisharp/loggingEvents'; +import { OmnisharpBackgroundDiagnosticStatus } from '../../../../src/omnisharp/omnisharpLoggingEvents'; import { BackgroundWorkStatusBarObserver } from '../../../../src/omnisharp/observers/backgroundWorkStatusBarObserver'; import { BackgroundDiagnosticStatus } from '../../../../src/omnisharp/protocol'; diff --git a/test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts index a33c9b4af..016bbb4f4 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetChannelObserver.test.ts @@ -6,7 +6,7 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { DotNetChannelObserver } from '../../../../src/omnisharp/observers/dotnetChannelObserver'; import { getNullChannel } from '../../../fakes'; -import { CommandDotNetRestoreStart } from '../../../../src/omnisharp/loggingEvents'; +import { CommandDotNetRestoreStart } from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('DotnetChannelObserver', () => { let hasShown: boolean; diff --git a/test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts index fc03cfcda..0e5eee364 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetLoggerObserver.test.ts @@ -6,12 +6,12 @@ import { describe, test, expect } from '@jest/globals'; import { getNullChannel } from '../../../fakes'; import { DotnetLoggerObserver } from '../../../../src/omnisharp/observers/dotnetLoggerObserver'; +import { EventWithMessage } from '../../../../src/shared/loggingEvents'; import { + CommandDotNetRestoreFailed, CommandDotNetRestoreProgress, CommandDotNetRestoreSucceeded, - CommandDotNetRestoreFailed, - EventWithMessage, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('DotnetLoggerObserver', () => { [ diff --git a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts index e44f1741f..cb2c57dce 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestChannelObserver.test.ts @@ -5,15 +5,15 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { getNullChannel } from '../../../fakes'; +import { BaseEvent } from '../../../../src/shared/loggingEvents'; +import DotnetTestChannelObserver from '../../../../src/omnisharp/observers/dotnetTestChannelObserver'; import { - BaseEvent, - DotNetTestsInClassDebugStart, - DotNetTestRunStart, + DotNetTestDebugStart, DotNetTestRunFailure, + DotNetTestRunStart, + DotNetTestsInClassDebugStart, DotNetTestsInClassRunStart, - DotNetTestDebugStart, -} from '../../../../src/omnisharp/loggingEvents'; -import DotnetTestChannelObserver from '../../../../src/omnisharp/observers/dotnetTestChannelObserver'; +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('DotnetTestChannelObserver', () => { let hasShown: boolean; diff --git a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts index 1de052626..dc01fc6bc 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts @@ -5,23 +5,22 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { getNullChannel } from '../../../fakes'; +import { EventWithMessage, BaseEvent } from '../../../../src/shared/loggingEvents'; +import DotNetTestLoggerObserver from '../../../../src/omnisharp/observers/dotnetTestLoggerObserver'; +import * as protocol from '../../../../src/omnisharp/protocol'; import { - EventWithMessage, - DotNetTestDebugWarning, - DotNetTestDebugStart, - BaseEvent, - DotNetTestRunStart, + DotNetTestDebugComplete, + DotNetTestDebugInContextStart, DotNetTestDebugProcessStart, + DotNetTestDebugStart, + DotNetTestDebugWarning, DotNetTestMessage, - DotNetTestDebugComplete, - ReportDotNetTestResults, + DotNetTestRunInContextStart, + DotNetTestRunStart, DotNetTestsInClassDebugStart, DotNetTestsInClassRunStart, - DotNetTestRunInContextStart, - DotNetTestDebugInContextStart, -} from '../../../../src/omnisharp/loggingEvents'; -import DotNetTestLoggerObserver from '../../../../src/omnisharp/observers/dotnetTestLoggerObserver'; -import * as protocol from '../../../../src/omnisharp/protocol'; + ReportDotNetTestResults, +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe(`${DotNetTestLoggerObserver.name}`, () => { let appendedMessage: string; diff --git a/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts index f4670de6a..df72f9f02 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts @@ -7,14 +7,9 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { vscode } from '../../../../src/vscodeAdapter'; import { ErrorMessageObserver } from '../../../../src/omnisharp/observers/errorMessageObserver'; -import { - ZipError, - DotNetTestRunFailure, - DotNetTestDebugStartFailure, - EventWithMessage, - IntegrityCheckFailure, -} from '../../../../src/omnisharp/loggingEvents'; +import { ZipError, EventWithMessage, IntegrityCheckFailure } from '../../../../src/shared/loggingEvents'; import { getFakeVsCode } from '../../../fakes'; +import { DotNetTestDebugStartFailure, DotNetTestRunFailure } from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('ErrorMessageObserver', () => { const vscode: vscode = getFakeVsCode(); diff --git a/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts index 27ea269e5..29bc6ced0 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts @@ -7,14 +7,14 @@ import * as vscode from 'vscode'; import { jest, describe, test, expect, beforeEach } from '@jest/globals'; import { getNullChannel, getWorkspaceConfiguration } from '../../../fakes'; import { OmnisharpChannelObserver } from '../../../../src/omnisharp/observers/omnisharpChannelObserver'; +import { BaseEvent } from '../../../../src/shared/loggingEvents'; +import { Subject } from 'rxjs'; import { OmnisharpFailure, - ShowOmniSharpChannel, - BaseEvent, OmnisharpRestart, OmnisharpServerOnStdErr, -} from '../../../../src/omnisharp/loggingEvents'; -import { Subject } from 'rxjs'; + ShowOmniSharpChannel, +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('OmnisharpChannelObserver', () => { let hasShown: boolean; diff --git a/test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts index df2680e1e..09ffa8a09 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpDebugModeLoggerObserver.test.ts @@ -4,18 +4,18 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; import { getNullChannel } from '../../../fakes'; +import { EventWithMessage } from '../../../../src/shared/loggingEvents'; +import { OmnisharpDebugModeLoggerObserver } from '../../../../src/omnisharp/observers/omnisharpDebugModeLoggerObserver'; import { - OmnisharpServerVerboseMessage, - EventWithMessage, + OmnisharpEventPacketReceived, OmnisharpRequestMessage, - OmnisharpServerEnqueueRequest, OmnisharpServerDequeueRequest, - OmnisharpServerProcessRequestStart, - OmnisharpEventPacketReceived, + OmnisharpServerEnqueueRequest, OmnisharpServerProcessRequestComplete, + OmnisharpServerProcessRequestStart, OmnisharpServerRequestCancelled, -} from '../../../../src/omnisharp/loggingEvents'; -import { OmnisharpDebugModeLoggerObserver } from '../../../../src/omnisharp/observers/omnisharpDebugModeLoggerObserver'; + OmnisharpServerVerboseMessage, +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('OmnisharpDebugModeLoggerObserver', () => { let logOutput = ''; diff --git a/test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts index 7de44e78a..48c3c4725 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpLoggerObserver.test.ts @@ -7,7 +7,6 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { OmnisharpLoggerObserver } from '../../../../src/omnisharp/observers/omnisharpLoggerObserver'; import { OmnisharpServerMsBuildProjectDiagnostics, - EventWithMessage, OmnisharpServerOnStdErr, OmnisharpServerMessage, OmnisharpServerOnServerError, @@ -16,9 +15,10 @@ import { OmnisharpServerOnError, OmnisharpFailure, OmnisharpEventPacketReceived, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; import { OutputChannel } from 'vscode'; import { PlatformInformation } from '../../../../src/shared/platform'; +import { EventWithMessage } from '../../../../src/shared/loggingEvents'; describe('OmnisharpLoggerObserver', () => { let logOutput = ''; diff --git a/test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts index d2b9f2c3e..8bf0a4731 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpStatusBarObserver.test.ts @@ -5,19 +5,21 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { StatusBarItem } from '../../../../src/vscodeAdapter'; +import { + DownloadStart, + InstallationStart, + DownloadProgress, + BaseEvent, + InstallationSuccess, +} from '../../../../src/shared/loggingEvents'; import { OmnisharpOnBeforeServerInstall, OmnisharpOnBeforeServerStart, OmnisharpServerOnServerError, OmnisharpServerOnStart, OmnisharpServerOnStop, - DownloadStart, - InstallationStart, - DownloadProgress, OmnisharpServerOnStdErr, - BaseEvent, - InstallationSuccess, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; import { OmnisharpStatusBarObserver, StatusBarColors, diff --git a/test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts index f92f585ba..dd5da182b 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/projectStatusBarObserver.test.ts @@ -7,7 +7,10 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { getWorkspaceInformationUpdated, getMSBuildWorkspaceInformation } from '../../../fakes'; import { StatusBarItem } from '../../../../src/vscodeAdapter'; import { ProjectStatusBarObserver } from '../../../../src/omnisharp/observers/projectStatusBarObserver'; -import { OmnisharpOnMultipleLaunchTargets, OmnisharpServerOnStop } from '../../../../src/omnisharp/loggingEvents'; +import { + OmnisharpOnMultipleLaunchTargets, + OmnisharpServerOnStop, +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('ProjectStatusBarObserver', () => { let showCalled: boolean; diff --git a/test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts index c069235c8..9336ca79a 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/razorLoggerObserver.test.ts @@ -9,7 +9,7 @@ import { RazorPluginPathSpecified, RazorPluginPathDoesNotExist, RazorDevModeActive, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; describe('RazorLoggerObserver', () => { let logOutput = ''; diff --git a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts index 78ba21378..08cf21513 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts @@ -6,10 +6,8 @@ import { beforeEach, test, describe, expect } from '@jest/globals'; import { TelemetryObserver } from '../../../../src/omnisharp/observers/telemetryObserver'; import { PlatformInformation } from '../../../../src/shared/platform'; +import { PackageInstallation, InstallationFailure, InstallationSuccess } from '../../../../src/shared/loggingEvents'; import { - PackageInstallation, - InstallationFailure, - InstallationSuccess, TestExecutionCountReport, TelemetryEventWithMeasures, OmnisharpDelayTrackerEventMeasures, @@ -17,7 +15,7 @@ import { TelemetryEvent, ProjectConfiguration, TelemetryErrorEvent, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/omnisharp/omnisharpLoggingEvents'; import { getNullTelemetryReporter } from '../../../fakes'; import { Package } from '../../../../src/packageManager/package'; import { PackageError } from '../../../../src/packageManager/packageError'; diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts index afc90a1f8..bdfb65f6e 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts @@ -24,7 +24,7 @@ import { InstallationStart, InstallationSuccess, PackageInstallStart, -} from '../../../src/omnisharp/loggingEvents'; +} from '../../../src/shared/loggingEvents'; import TestEventBus from './testAssets/testEventBus'; import { testPackageJSON } from './testAssets/testAssets'; import { modernNetVersion } from '../../../src/omnisharp/omnisharpPackageCreator'; diff --git a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 1f1612774..b71736036 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -21,7 +21,7 @@ import { IntegrityCheckFailure, DownloadFailure, InstallationFailure, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/shared/loggingEvents'; import MockHttpsServer from '../testAssets/mockHttpsServer'; import { createTestFile } from '../testAssets/testFile'; import TestEventBus from '../testAssets/testEventBus'; diff --git a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts index 29d69fbc8..73719d77e 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts @@ -14,7 +14,7 @@ import { DownloadSuccess, DownloadFallBack, DownloadFailure, -} from '../../../../src/omnisharp/loggingEvents'; +} from '../../../../src/shared/loggingEvents'; import MockHttpsServer from '../testAssets/mockHttpsServer'; import TestEventBus from '../testAssets/testEventBus'; diff --git a/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts index e92062d4a..b963342fa 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts @@ -11,7 +11,7 @@ import { CreateTmpDir, TmpAsset } from '../../../../src/createTmpAsset'; import { InstallZip } from '../../../../src/packageManager/zipInstaller'; import { EventStream } from '../../../../src/eventStream'; import { PlatformInformation } from '../../../../src/shared/platform'; -import { BaseEvent, InstallationStart, ZipError } from '../../../../src/omnisharp/loggingEvents'; +import { BaseEvent, InstallationStart, ZipError } from '../../../../src/shared/loggingEvents'; import { createTestFile } from '../testAssets/testFile'; import TestZip from '../testAssets/testZip'; import TestEventBus from '../testAssets/testEventBus'; diff --git a/test/omnisharp/omnisharpUnitTests/processPicker.test.ts b/test/omnisharp/omnisharpUnitTests/processPicker.test.ts index 3798131c4..1f9f7f238 100644 --- a/test/omnisharp/omnisharpUnitTests/processPicker.test.ts +++ b/test/omnisharp/omnisharpUnitTests/processPicker.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect } from '@jest/globals'; -import { RemoteAttachPicker, Process, CimProcessParser } from '../../../src/omnisharp/features/processPicker'; +import { RemoteAttachPicker, Process, CimProcessParser } from '../../../src/shared/processPicker'; describe('Remote Process Picker: Validate quoting arguments.', () => { test('Argument with no spaces', () => { diff --git a/test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts index 7fa580cf0..5370d02e0 100644 --- a/test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts +++ b/test/omnisharp/omnisharpUnitTests/testAssets/testEventBus.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { EventStream } from '../../../../src/eventStream'; -import { BaseEvent } from '../../../../src/omnisharp/loggingEvents'; +import { BaseEvent } from '../../../../src/shared/loggingEvents'; import Disposable, { IDisposable } from '../../../../src/disposable'; export default class TestEventBus { From 7b86e7630e1e3e1fc6e5367f03f3aa0291c87a5c Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 9 Sep 2024 11:06:21 -0700 Subject: [PATCH 047/100] Ensure the fix all resolve request reads an existing field --- src/lsptoolshost/fixAllCodeAction.ts | 10 +++++++--- src/lsptoolshost/roslynProtocol.ts | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/lsptoolshost/fixAllCodeAction.ts b/src/lsptoolshost/fixAllCodeAction.ts index d0741b5e5..d4a510f94 100644 --- a/src/lsptoolshost/fixAllCodeAction.ts +++ b/src/lsptoolshost/fixAllCodeAction.ts @@ -24,10 +24,14 @@ export function registerCodeActionFixAllCommands( } export async function getFixAllResponse( - data: LSPAny, + data: RoslynProtocol.CodeActionResolveData, languageServer: RoslynLanguageServer, outputChannel: vscode.OutputChannel ) { + if (!data.FixAllFlavors) { + throw new Error(`FixAllFlavors is missing from data ${JSON.stringify(data)}`); + } + const result = await vscode.window.showQuickPick(data.FixAllFlavors, { placeHolder: vscode.l10n.t('Pick a fix all scope'), }); @@ -41,7 +45,7 @@ export async function getFixAllResponse( async (_, token) => { if (result) { const fixAllCodeAction: RoslynProtocol.RoslynFixAllCodeAction = { - title: data.title, + title: data.UniqueIdentifier, data: data, scope: result, }; @@ -71,7 +75,7 @@ export async function getFixAllResponse( async function registerFixAllResolveCodeAction( languageServer: RoslynLanguageServer, - codeActionData: any, + codeActionData: RoslynProtocol.CodeActionResolveData, outputChannel: vscode.OutputChannel ) { if (codeActionData) { diff --git a/src/lsptoolshost/roslynProtocol.ts b/src/lsptoolshost/roslynProtocol.ts index 7c0801886..4e5850770 100644 --- a/src/lsptoolshost/roslynProtocol.ts +++ b/src/lsptoolshost/roslynProtocol.ts @@ -188,6 +188,15 @@ export interface RoslynFixAllCodeAction extends CodeAction { scope: string; } +/** + * Should match the definition on the server side, but only the properties we require on the client side. + * https://github.com/dotnet/roslyn/blob/bd5c00e5e09de8564093f42d87fe49d4971f2e84/src/LanguageServer/Protocol/Handler/CodeActions/CodeActionResolveData.cs#L16C20-L16C41 + */ +export interface CodeActionResolveData { + UniqueIdentifier: string; + FixAllFlavors?: string[]; +} + export interface NamedPipeInformation { pipeName: string; } From 4feabb7364ec2136ab9b6852fd66b6f8e83851c8 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 9 Sep 2024 14:02:45 -0700 Subject: [PATCH 048/100] Use existing profile when F5 launching integration tests --- .vscode/launch.json | 28 +++++++++++-------- test/csharp-standalone-profile.code-profile | 1 + test/lsptoolshost/integrationTests/README.md | 0 .../integrationTests/integrationHelpers.ts | 11 -------- .../integrationHelpers.ts | 9 ------ 5 files changed, 17 insertions(+), 32 deletions(-) create mode 100644 test/csharp-standalone-profile.code-profile create mode 100644 test/lsptoolshost/integrationTests/README.md diff --git a/.vscode/launch.json b/.vscode/launch.json index 0da4ba7af..bbc796132 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -17,9 +17,10 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": [ - // Create a temp profile that has no extensions / user settings. - // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. - "--profile-temp", + // 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. + "--profile csharp-standalone-profile", "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" @@ -40,9 +41,10 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": [ - // Create a temp profile that has no extensions / user settings. - // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. - "--profile-temp", + // 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. + "--profile csharp-standalone-profile", "${workspaceRoot}/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/razor/razorIntegrationTests" @@ -63,9 +65,10 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": [ - // Create a temp profile that has no extensions / user settings. - // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. - "--profile-temp", + // 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. + "--profile csharp-standalone-profile", "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" @@ -86,9 +89,10 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": [ - // Create a temp profile that has no extensions / user settings. - // This allows us to only have the C# extension + the dotnet runtime installer extension dependency. - "--profile-temp", + // 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. + "--profile csharp-standalone-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/test/csharp-standalone-profile.code-profile b/test/csharp-standalone-profile.code-profile new file mode 100644 index 000000000..795669a96 --- /dev/null +++ b/test/csharp-standalone-profile.code-profile @@ -0,0 +1 @@ +{"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/lsptoolshost/integrationTests/README.md b/test/lsptoolshost/integrationTests/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/test/lsptoolshost/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts index 8096a8668..139117a5f 100644 --- a/test/lsptoolshost/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -11,17 +11,6 @@ import { ServerState } from '../../../src/lsptoolshost/serverStateChange'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; export async function activateCSharpExtension(): Promise { - // Ensure the dependent extension exists - when launching via F5 launch.json we can't install the extension prior to opening vscode. - const vscodeDotnetRuntimeExtensionId = 'ms-dotnettools.vscode-dotnet-runtime'; - const dotnetRuntimeExtension = - vscode.extensions.getExtension(vscodeDotnetRuntimeExtensionId); - if (!dotnetRuntimeExtension) { - await vscode.commands.executeCommand('workbench.extensions.installExtension', vscodeDotnetRuntimeExtensionId, { - donotSync: true, - }); - await vscode.commands.executeCommand('workbench.action.reloadWindow'); - } - const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); if (!csharpExtension) { throw new Error('Failed to find installation of ms-dotnettools.csharp'); diff --git a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 6d9290598..16576083b 100644 --- a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -17,15 +17,6 @@ export interface ActivationResult { } export async function activateCSharpExtension(): Promise { - // Ensure the dependent extension exists - when launching via F5 launch.json we can't install the extension prior to opening vscode. - const vscodeDotnetRuntimeExtensionId = 'ms-dotnettools.vscode-dotnet-runtime'; - const dotnetRuntimeExtension = - vscode.extensions.getExtension(vscodeDotnetRuntimeExtensionId); - if (!dotnetRuntimeExtension) { - await vscode.commands.executeCommand('workbench.extensions.installExtension', vscodeDotnetRuntimeExtensionId); - await vscode.commands.executeCommand('workbench.action.reloadWindow'); - } - const configuration = vscode.workspace.getConfiguration(); configuration.update( 'omnisharp.enableLspDriver', From 218bd3211e524d81914e3428ba0454038f1b8e19 Mon Sep 17 00:00:00 2001 From: Evgeny Tvorun Date: Mon, 9 Sep 2024 14:15:33 -0700 Subject: [PATCH 049/100] Do not auto surround `<`, `[` and `(` in XAML. --- src/xaml/language-configuration.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/xaml/language-configuration.json b/src/xaml/language-configuration.json index 086e48314..0175d6cb2 100644 --- a/src/xaml/language-configuration.json +++ b/src/xaml/language-configuration.json @@ -40,10 +40,7 @@ "surroundingPairs": [ { "open": "'", "close": "'" }, { "open": "\"", "close": "\"" }, - { "open": "{", "close": "}"}, - { "open": "[", "close": "]"}, - { "open": "(", "close": ")" }, - { "open": "<", "close": ">" } + { "open": "{", "close": "}"} ], "colorizedBracketPairs": [ ], From e4c30087e0d01a19f10faf831fdfc0455384464e Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 9 Sep 2024 14:16:21 -0700 Subject: [PATCH 050/100] Use existing profiles for integration tests --- .vscode/launch.json | 12 ++++++++---- CONTRIBUTING.md | 14 +++++++++----- test/lsptoolshost/integrationTests/README.md | 0 3 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 test/lsptoolshost/integrationTests/README.md diff --git a/.vscode/launch.json b/.vscode/launch.json index bbc796132..85a3417f6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,7 +20,8 @@ // 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. - "--profile csharp-standalone-profile", + "--profile", + "csharp-standalone-profile", "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" @@ -44,7 +45,8 @@ // 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. - "--profile csharp-standalone-profile", + "--profile", + "csharp-standalone-profile", "${workspaceRoot}/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/razor/razorIntegrationTests" @@ -68,7 +70,8 @@ // 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. - "--profile csharp-standalone-profile", + "--profile", + "csharp-standalone-profile", "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" @@ -92,7 +95,8 @@ // 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. - "--profile csharp-standalone-profile", + "--profile", + "csharp-standalone-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 a6ba7e542..d885f3285 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,12 +51,16 @@ After completing the build steps: #### Testing -To run tests: +To run all tests, execute `npm run test`. -1. Execute `npm run test` or press F5 in VS Code with the "Launch Tests" debug configuration selected. -2. For integration tests, select either of the two 'current file' integration tests (one for roslyn and one for razor), from the drop-down and press F5 to start debugging: -- For Roslyn Server: `Launch Current File slnWithCsproj Integration Tests` -- For Razor Server: `Launch Current File BasicRazorApp2_1 Integration Tests` +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. +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/razor`, use `Launch Current File BasicRazorApp2_1 Integration Tests` + - For integration tests inside `test/omnisharp`, use one of the `Omnisharp:` current file profiles These will allow you to actually debug the test, but the 'Razor integration tests' configuration does not. diff --git a/test/lsptoolshost/integrationTests/README.md b/test/lsptoolshost/integrationTests/README.md deleted file mode 100644 index e69de29bb..000000000 From 869ee428dab3d3db980833e825b81f7a022e41b7 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 9 Sep 2024 13:52:48 -0700 Subject: [PATCH 051/100] Add tests for navigation from inside metadata as source workspace --- .../gotoDefinition.integration.test.ts | 93 ++++++++++++++++++- .../integrationTests/integrationHelpers.ts | 11 +++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts index aae1a58c7..348e714c9 100644 --- a/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts +++ b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts @@ -6,7 +6,12 @@ import * as vscode from 'vscode'; import * as path from 'path'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; -import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + findRangeOfString, + openFileInWorkspaceAsync, +} from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { @@ -79,6 +84,50 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { ); }); + test('Navigates from definition in decompiled source goes to decompiled source', 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'); + expect(vscode.window.activeTextEditor?.document.getText()).toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + + // 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'); + expect(vscode.window.activeTextEditor?.document.getText()).toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + }); + test('Navigates to definition in metadata as source', async () => { // Get definitions const requestPosition = new vscode.Position(10, 25); @@ -100,6 +149,48 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { ); }); + test('Navigates to definition from inside metadata as source', async () => { + // Get definitions + const requestPosition = new vscode.Position(10, 25); + 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('Console.cs'); + + // Navigate + await navigate(requestPosition, definitionList, 'Console.cs'); + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + + // Get definitions from inside Console.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!, 'ConsoleColor ForegroundColor')[0]; + const consoleColorDefinition = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + rangeOfDefinition.start + ) + ); + + expect(consoleColorDefinition.length).toEqual(1); + const consoleColorDefinitionPath = consoleColorDefinition[0].uri; + expect(consoleColorDefinitionPath.fsPath).toContain('ConsoleColor.cs'); + + // Navigate + await navigate(rangeOfDefinition.start, consoleColorDefinition, 'ConsoleColor.cs'); + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + }); + test('Returns multiple definitions for partial types', async () => { const definitionList = ( await vscode.commands.executeCommand( diff --git a/test/lsptoolshost/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts index 8096a8668..fcfc52c56 100644 --- a/test/lsptoolshost/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -131,6 +131,17 @@ export function sortLocations(locations: vscode.Location[]): vscode.Location[] { }); } +export function findRangeOfString(editor: vscode.TextEditor, stringToFind: string): vscode.Range[] { + const text = editor.document.getText(); + const matches = [...text.matchAll(new RegExp(stringToFind, 'gm'))]; + const ranges = matches.map((match) => { + const startPos = editor.document.positionAt(match.index!); + const endPos = editor.document.positionAt(match.index! + stringToFind.length); + return new vscode.Range(startPos, endPos); + }); + return ranges; +} + function isGivenSln(workspace: typeof vscode.workspace, expectedProjectFileName: string) { const primeWorkspace = workspace.workspaceFolders![0]; const projectFileName = primeWorkspace.uri.fsPath.split(path.sep).pop(); From 33268c2dba8d7fee25a2dcbb6ab1bef7bfbe07ca Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 9 Sep 2024 15:25:42 -0700 Subject: [PATCH 052/100] Fix install extensions launch on MacOS --- test/vscodeLauncher.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test/vscodeLauncher.ts b/test/vscodeLauncher.ts index 9b309c1eb..1b51df03a 100644 --- a/test/vscodeLauncher.ts +++ b/test/vscodeLauncher.ts @@ -17,21 +17,26 @@ function getSln(workspacePath: string): string | undefined { async function main() { try { - const vscodeExecutablePath = await downloadAndUnzipVSCode('1.92.2'); + 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']; - console.log(fullArgs); - const result = cp.spawnSync(cli, fullArgs, { + + // 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) { - throw new Error(`Failed to install the runtime extension: ${result.error}`); + 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 From 2de1ae6cb4a369b81c800c952a6ac1254b1af353 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Tue, 10 Sep 2024 17:26:00 -0700 Subject: [PATCH 053/100] Do not inject 'debugConsoleVerbosity' for 'coreclr' (#7546) This PR removes the csharp.debug.debugConsoleVerbosity option from being loaded for 'coreclr' launch.json. --- src/shared/configurationProvider.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/shared/configurationProvider.ts b/src/shared/configurationProvider.ts index b223a93e3..9ff342ac4 100644 --- a/src/shared/configurationProvider.ts +++ b/src/shared/configurationProvider.ts @@ -193,8 +193,11 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration for (const key of keys) { // Skip since option is set in the launch.json configuration - // Skip 'console' option since this should be set when we know this is a console project. - if (Object.prototype.hasOwnProperty.call(debugConfiguration, key) || key === 'console') { + if ( + Object.prototype.hasOwnProperty.call(debugConfiguration, key) || + key === 'console' || // Skip 'console' option since this should be set when we know this is a console project. + key == 'debugConsoleVerbosity' // Skip 'debugConsoleVerbosity' since this is a C# Dev Kit option + ) { continue; } From c731d903a4dbec6c0a4d0824c6e1cea6adc4ca78 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 11 Sep 2024 14:22:42 -0400 Subject: [PATCH 054/100] Bump xamlTools to 17.12.35311.18 This is from the VS build for Wednesday, 9/09. Also updated CHANGELOG. --- CHANGELOG.md | 3 ++- package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cba5d592..05d22913f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,9 @@ * Update Roslyn to 4.12.0-3.24456.2 (PR: [#7525](https://github.com/dotnet/vscode-csharp/pull/7525)) * Avoid BuildHost crash in Mono due to missing types (PR: [#74994](https://github.com/dotnet/roslyn/pull/74994)) * Turn off word suggestions in XAML completions (PR: [#7516](https://github.com/dotnet/vscode-csharp/pull/7516)) -* Bump xamltools to 17.12.35305.252 (PR: [#7521](https://github.com/dotnet/vscode-csharp/pull/7521)) +* Bump xamltools to 17.12.35311.18 (PR: [#7549](https://github.com/dotnet/vscode-csharp/pull/7549)) * XAML editor enabled various lightbulbs related to x:DataType, BindingContext and Bindings. + * XAML color swatches # 2.46.x * Update Roslyn to 4.12.0-3.24430.2 (PR: [#7496](https://github.com/dotnet/vscode-csharp/pull/7496)) diff --git a/package.json b/package.json index d8b4470e1..ce75cecaa 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.35305.252" + "xamlTools": "17.12.35311.18" }, "main": "./dist/extension", "l10n": "./l10n", From a5abbf76570b88da1cd6626fa78f437af3a571e0 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 11 Sep 2024 12:18:45 -0700 Subject: [PATCH 055/100] Update .gdnbaselines Update baseline now that test private key has moved location. --- .config/guardian/.gdnbaselines | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.config/guardian/.gdnbaselines b/.config/guardian/.gdnbaselines index 1e773d750..ad1c9aa80 100644 --- a/.config/guardian/.gdnbaselines +++ b/.config/guardian/.gdnbaselines @@ -1,18 +1,20 @@ { + "hydrated": true, "properties": { - "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines" + "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines", + "hydrationStatus": "This file contains identifying data. It is **NOT** safe to check into your repo. To dehydrate this file, run `guardian dehydrate --help` and follow the guidance." }, "version": "1.0.0", "baselines": { "default": { "name": "default", - "createdDate": "2024-03-18 18:32:58Z", - "lastUpdatedDate": "2024-03-18 18:32:58Z" + "createdDate": "2024-09-09 19:35:36Z", + "lastUpdatedDate": "2024-09-09 19:35:36Z" } }, "results": { - "d6ffb0614846153cf3cc5936d0444ed9eda6fe6854febb4c8ea59243c120b223": { - "signature": "d6ffb0614846153cf3cc5936d0444ed9eda6fe6854febb4c8ea59243c120b223", + "26445e3e484940d2d58c2ffc32ab3895fca4b1589d66e2f2dee2fa01f2c479fb": { + "signature": "26445e3e484940d2d58c2ffc32ab3895fca4b1589d66e2f2dee2fa01f2c479fb", "alternativeSignatures": [], "target": "test/omnisharp/omnisharpUnitTests/testAssets/private.pem", "line": 1, @@ -21,9 +23,7 @@ ], "tool": "credscan", "ruleId": "CSCAN-GENERAL0020", - "createdDate": "2024-06-27 21:30:23Z", - "expirationDate": "2024-12-14 21:44:58Z", - "justification": "This error is baselined with an expiration date of 180 days from 2024-06-27 21:44:58Z" + "createdDate": "2024-09-09 19:35:36Z" } } } From 8c49656aefbfc1d752dc70243dcc0a2ee8f48a53 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 11 Sep 2024 15:27:23 -0400 Subject: [PATCH 056/100] Updated CHANGELOG.md --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05d22913f..8b07006db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,12 +4,15 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Bump xamltools to 17.12.35311.18 (PR: [#7549](https://github.com/dotnet/vscode-csharp/pull/7549)) + * XAML color swatches + +# 2.47.x * Update Roslyn to 4.12.0-3.24456.2 (PR: [#7525](https://github.com/dotnet/vscode-csharp/pull/7525)) * Avoid BuildHost crash in Mono due to missing types (PR: [#74994](https://github.com/dotnet/roslyn/pull/74994)) * Turn off word suggestions in XAML completions (PR: [#7516](https://github.com/dotnet/vscode-csharp/pull/7516)) -* Bump xamltools to 17.12.35311.18 (PR: [#7549](https://github.com/dotnet/vscode-csharp/pull/7549)) +* Bump xamltools to 17.12.35305.252 (PR: [#7521](https://github.com/dotnet/vscode-csharp/pull/7521)) * XAML editor enabled various lightbulbs related to x:DataType, BindingContext and Bindings. - * XAML color swatches # 2.46.x * Update Roslyn to 4.12.0-3.24430.2 (PR: [#7496](https://github.com/dotnet/vscode-csharp/pull/7496)) From aeff626e8a95be800010b08bb86c5e824a0bf66c Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Wed, 11 Sep 2024 13:56:27 -0700 Subject: [PATCH 057/100] Update Debugger to v2.47.0 (#7547) --- package.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index ce75cecaa..c8ce59ddb 100644 --- a/package.json +++ b/package.json @@ -420,7 +420,7 @@ { "id": "Debugger", "description": ".NET Core Debugger (Windows / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-win7-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-win7-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "win32" @@ -430,12 +430,12 @@ "arm64" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui.exe", - "integrity": "09B636A0CDDE06B822EE767A2A0637845F313427029E860D25C1271E738E4C9D" + "integrity": "3D8F046E44F7E7A5A4B6C24468D2AEBC4773F28E66F9E732D3D5E76F79C3DB32" }, { "id": "Debugger", "description": ".NET Core Debugger (Windows / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-win10-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-win10-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "win32" @@ -444,12 +444,12 @@ "arm64" ], "installTestPath": "./.debugger/arm64/vsdbg-ui.exe", - "integrity": "68AB910A1204FC164A211BF80F55C07227B1D557A4F8A0D0290B598F19B2388C" + "integrity": "142B58C35C70D31094AF4AB31A2B11BDB4FA747811D086AB079AD260EF00ACBC" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-osx-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-osx-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "darwin" @@ -463,12 +463,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui", - "integrity": "D65C1C28F8EAB504B67C6B05AF86990135E0B2E43041CDB398F849D1F30488A0" + "integrity": "BCABF433604B2206F08638EDE8DF921CF8807E23D48824F320BA1829CB0A8BDD" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / arm64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-osx-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-osx-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "darwin" @@ -481,12 +481,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/arm64/vsdbg-ui", - "integrity": "127FBE4D4B5CD361B4FFCA3971565F87807510CAC599424F886A74CF6FBDB7E3" + "integrity": "641E189D1ECF36506FFEE29E85131AFC5575172435F3D67A5E1B55861270FA45" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-linux-arm.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-arm.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -499,12 +499,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "FBED7C822402B978B5F6102C1526CD6294842C5ACE014AFF2C510ED980BC8FE7" + "integrity": "F4932D5E5C01F4147D3735177496B8DE922A92A9B975CC89D52C2227F008B193" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-linux-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-arm64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -517,12 +517,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "E5FB62E79BC08C67890933913CBAD1D25FB875DD73C553F73F00ECFC22CDE28B" + "integrity": "3E3BBCF80931FA704CF33CD1BAE72E0FE0E021968070FC6D4156BBC2BD797D77" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-linux-musl-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-musl-x64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -535,12 +535,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "B4BAF73895504D04584BF7E03BBCED840B2405B6F8F432C2E6E8E2C8CB8F952E" + "integrity": "5B83C49084D3A5F314AD18E25DE8042DF6D17335A6535A60307ADF07A777CB49" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-linux-musl-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-musl-arm64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -553,12 +553,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "1F56B47005E7F29C653F351D2A53038AF7E9E4B27969B30DC6C030B2DB0CF6CB" + "integrity": "633C5F3A419CDED6842088BFAF8F4F52CDEF0149F3DBC1BB5BA2AA87F159A21F" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-43-0/coreclr-debug-linux-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-x64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -571,7 +571,7 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "D26DDB552DCED21D979174FB4783560AA4F8EE3AFC195EA93B0D1A7EBCFCBA79" + "integrity": "83D55C4BF672F6369E6C152DA7888398824AE59136F224B098154F5F41FD16FA" }, { "id": "RazorOmnisharp", @@ -5586,4 +5586,4 @@ } } } -} +} \ No newline at end of file From 237a3e3833c60a284fa37f70438abc9febce5247 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 9 Sep 2024 16:46:08 -0700 Subject: [PATCH 058/100] Add code action tests --- .../codeactions.integration.test.ts | 349 ++++++++++++++++++ .../formatting.integration.test.ts | 15 +- ...formattingEditorConfig.integration.test.ts | 15 +- .../integrationTests/formattingTestHelpers.ts | 6 - .../integrationTests/integrationHelpers.ts | 7 + .../slnWithCsproj/src/app/CodeActions.cs | 13 + .../src/app/CodeActionsInProject.cs | 7 + .../test/CodeActionsInSolution.cs | 7 + 8 files changed, 403 insertions(+), 16 deletions(-) create mode 100644 test/lsptoolshost/integrationTests/codeactions.integration.test.ts create mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActions.cs create mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActionsInProject.cs create mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/CodeActionsInSolution.cs diff --git a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts new file mode 100644 index 000000000..371b1732f --- /dev/null +++ b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts @@ -0,0 +1,349 @@ +/*--------------------------------------------------------------------------------------------- + * 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 * as path from 'path'; +import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; +import testAssetWorkspace from './testAssets/testAssetWorkspace'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + expectText, + openFileInWorkspaceAsync, +} from './integrationHelpers'; + +describe(`[${testAssetWorkspace.description}] Test Code Actions`, () => { + beforeAll(async () => { + await activateCSharpExtension(); + }); + + beforeEach(async () => { + const fileName = path.join('src', 'app', 'CodeActions.cs'); + await openFileInWorkspaceAsync(fileName); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + afterEach(async () => { + await closeAllEditorsAsync(); + }); + + test('Lightbulb displays actions', async () => { + const actions = await getCodeActions(new vscode.Range(0, 0, 0, 12)); + expect(actions.length).toBeGreaterThanOrEqual(3); + + // Verify we have unresolved code actions. + expect(actions[0].title).toBe('Remove unnecessary usings'); + expect(actions[0].kind).toStrictEqual(vscode.CodeActionKind.QuickFix); + expect(actions[0].edit).toBeUndefined(); + expect(actions[0].command).toBeUndefined(); + + expect(actions[1].title).toBe('Fix All: Remove unnecessary usings'); + expect(actions[1].kind).toStrictEqual(vscode.CodeActionKind.QuickFix); + expect(actions[1].edit).toBeUndefined(); + expect(actions[1].command).toBeDefined(); + + expect(actions[2].title).toBe('Suppress or configure issues'); + expect(actions[2].kind).toStrictEqual(vscode.CodeActionKind.QuickFix); + expect(actions[2].edit).toBeUndefined(); + expect(actions[2].command).toBeDefined(); + }); + + test('Remove unnecessary usings applied', async () => { + const actions = await getCodeActions(new vscode.Range(0, 0, 0, 12), 10); + + expect(actions[0].title).toBe('Remove unnecessary usings'); + expect(actions[0].edit).toBeDefined(); + + await vscode.workspace.applyEdit(actions[0].edit!); + + expectText(vscode.window.activeTextEditor!.document, [ + 'namespace CodeActionsTests;', + '', + 'class CodeActions', + '{', + ' static void Do() { Method(); }', + ' static void Method()', + ' {', + ' var x = 1;', + ' Do();', + ' }', + '}', + ]); + }); + + test('Add accessibility modifiers applied', async () => { + const actions = await getCodeActions(new vscode.Range(6, 16, 6, 19), 10); + + expect(actions[0].title).toBe('Add accessibility modifiers'); + expect(actions[0].edit).toBeDefined(); + + await vscode.workspace.applyEdit(actions[0].edit!); + + expectText(vscode.window.activeTextEditor!.document, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'class CodeActions', + '{', + ' private static void Do() { Method(); }', + ' static void Method()', + ' {', + ' var x = 1;', + ' Do();', + ' }', + '}', + ]); + }); + + test('Fix all in document', async () => { + const action = await getSpecificCodeAction( + new vscode.Range(6, 16, 6, 19), + 'Fix All: Add accessibility modifiers' + ); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Document*/ 0); + + expectText(vscode.window.activeTextEditor!.document, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'internal class CodeActions', + '{', + ' private static void Do() { Method(); }', + '', + ' private static void Method()', + ' {', + ' var x = 1;', + ' Do();', + ' }', + '}', + ]); + }); + + test('Fix all in project', async () => { + const action = await getSpecificCodeAction( + new vscode.Range(6, 16, 6, 19), + 'Fix All: Add accessibility modifiers' + ); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Project*/ 1); + + expectText(vscode.window.activeTextEditor!.document, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'internal class CodeActions', + '{', + ' private static void Do() { Method(); }', + '', + ' private static void Method()', + ' {', + ' var x = 1;', + ' Do();', + ' }', + '}', + ]); + + const projectFile = vscode.workspace.textDocuments.find((d) => d.fileName.endsWith('CodeActionsInProject.cs')); + expect(projectFile).toBeDefined(); + expectText(projectFile!, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'internal class CodeActionsInProject', + '{', + '}', + ]); + }); + + test('Fix all in solution', async () => { + const action = await getSpecificCodeAction( + new vscode.Range(6, 16, 6, 19), + 'Fix All: Add accessibility modifiers' + ); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Solution*/ 2); + + expectText(vscode.window.activeTextEditor!.document, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'internal class CodeActions', + '{', + ' private static void Do() { Method(); }', + '', + ' private static void Method()', + ' {', + ' var x = 1;', + ' Do();', + ' }', + '}', + ]); + + const currentProjectFile = vscode.workspace.textDocuments.find((d) => + d.fileName.endsWith('CodeActionsInProject.cs') + ); + expect(currentProjectFile).toBeDefined(); + expectText(currentProjectFile!, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'internal class CodeActionsInProject', + '{', + '}', + ]); + + const otherProjectFile = vscode.workspace.textDocuments.find((d) => + d.fileName.endsWith('CodeActionsInSolution.cs') + ); + expect(otherProjectFile).toBeDefined(); + expectText(otherProjectFile!, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'internal class CodeActionsInSolution', + '{', + '}', + ]); + }); + + test('Nested action', async () => { + const action = await getSpecificCodeAction(new vscode.Range(9, 12, 9, 12), 'Convert number'); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Convert to binary*/ 0); + + expectText(vscode.window.activeTextEditor!.document, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'class CodeActions', + '{', + ' static void Do() { Method(); }', + ' static void Method()', + ' {', + ' var x = 0b1;', + ' Do();', + ' }', + '}', + ]); + }); + + test('Suppress warning', async () => { + const action = await getSpecificCodeAction(new vscode.Range(9, 12, 9, 12), 'Suppress or configure issues'); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Suppress CS0219 -> in Source*/ 0); + + expectText(vscode.window.activeTextEditor!.document, [ + 'using System;', + '', + 'namespace CodeActionsTests;', + '', + 'class CodeActions', + '{', + ' static void Do() { Method(); }', + ' static void Method()', + ' {', + '#pragma warning disable CS0219 // Variable is assigned but its value is never used', + ' var x = 1;', + '#pragma warning restore CS0219 // Variable is assigned but its value is never used', + ' Do();', + ' }', + '}', + ]); + }); + + test('Configure code style option', async () => { + const action = await getSpecificCodeAction(new vscode.Range(6, 16, 6, 19), 'Suppress or configure issues'); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Configure IDE0040 code style -> never*/ 0); + + const editorConfigFile = vscode.workspace.textDocuments.find((d) => d.fileName.endsWith('.editorconfig')); + expect(editorConfigFile).toBeDefined(); + expect(editorConfigFile!.getText()).toContain('dotnet_style_require_accessibility_modifiers = never'); + }); + + test('Configure analyzer severity', async () => { + const action = await getSpecificCodeAction(new vscode.Range(6, 16, 6, 19), 'Suppress or configure issues'); + + expect(action.edit).toBeUndefined(); + expect(action.command).toBeDefined(); + + await invokeQuickPickAction(action, /*quickPickIndex: Configure IDE0040 severity -> None*/ 4); + + const editorConfigFile = vscode.workspace.textDocuments.find((d) => d.fileName.endsWith('.editorconfig')); + expect(editorConfigFile).toBeDefined(); + expect(editorConfigFile!.getText()).toContain('dotnet_diagnostic.IDE0040.severity = none'); + }); +}); + +async function getCodeActions( + range: vscode.Range, + resolveCount: number | undefined = undefined +): Promise { + const codeActions = await vscode.commands.executeCommand( + 'vscode.executeCodeActionProvider', + vscode.window.activeTextEditor!.document.uri, + range, + /** kind **/ undefined, + resolveCount + ); + return codeActions; +} + +async function getSpecificCodeAction(range: vscode.Range, title: string): Promise { + const codeActions = await getCodeActions(range, 100); + const action = codeActions.find((action) => action.title === title); + if (!action) { + throw new Error(`Code action '${title}' not found in ${codeActions.map((a) => a.title).join(', ')}`); + } + return action; +} + +async function invokeQuickPickAction(codeAction: vscode.CodeAction, quickPickIndex: number): Promise { + // Invoke, but do not await the command (the command blocks until a quick pick item is resolved) + const promise = vscode.commands.executeCommand(codeAction.command!.command, ...codeAction.command!.arguments!); + + // workbench.action.quickOpenSelectNext selects the next quick pick item. + // It must be called at least once to select the first item. + for (let i = 0; i <= quickPickIndex; i++) { + // First call ensures the quick pick is populated with items and the first is selected. + await vscode.commands.executeCommand('workbench.action.quickOpenSelectNext'); + } + + // Accept the selected item + await vscode.commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem'); + + // Finally wait for the command to complete. + await promise; +} diff --git a/test/lsptoolshost/integrationTests/formatting.integration.test.ts b/test/lsptoolshost/integrationTests/formatting.integration.test.ts index 144f915df..654cdd48a 100644 --- a/test/lsptoolshost/integrationTests/formatting.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formatting.integration.test.ts @@ -6,9 +6,14 @@ import * as vscode from 'vscode'; import * as path from 'path'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; -import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + expectText, + openFileInWorkspaceAsync, +} from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; -import { expectText, formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; +import { formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { beforeAll(async () => { @@ -45,7 +50,7 @@ describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { ' }', '}', ]; - expectText(expectedText); + expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document range formatting formats only the range', async () => { @@ -65,7 +70,7 @@ describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { ' }', '}', ]; - expectText(expectedText); + expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document on type formatting formats the typed location', async () => { @@ -84,6 +89,6 @@ describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { ' }', '}', ]; - expectText(expectedText); + expectText(vscode.window.activeTextEditor!.document, expectedText); }); }); diff --git a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts index 3d7ccef51..998b1268f 100644 --- a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts @@ -6,9 +6,14 @@ import * as vscode from 'vscode'; import * as path from 'path'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; -import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + expectText, + openFileInWorkspaceAsync, +} from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; -import { expectText, formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; +import { formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests`, () => { beforeAll(async () => { @@ -45,7 +50,7 @@ describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests ' }', '}', ]; - expectText(expectedText); + expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document range formatting respects editorconfig', async () => { @@ -67,7 +72,7 @@ describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests ' }', '}', ]; - expectText(expectedText); + expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document on type formatting respects editorconfig', async () => { @@ -90,6 +95,6 @@ describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests ' }', '}', ]; - expectText(expectedText); + expectText(vscode.window.activeTextEditor!.document, expectedText); }); }); diff --git a/test/lsptoolshost/integrationTests/formattingTestHelpers.ts b/test/lsptoolshost/integrationTests/formattingTestHelpers.ts index 803c9fb78..a138115e8 100644 --- a/test/lsptoolshost/integrationTests/formattingTestHelpers.ts +++ b/test/lsptoolshost/integrationTests/formattingTestHelpers.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { EOL } from 'os'; import { expect } from '@jest/globals'; export async function formatDocumentAsync(): Promise { @@ -57,8 +56,3 @@ async function applyEditsAsync(edits: vscode.TextEdit[]): Promise { const succeeded = await vscode.workspace.applyEdit(workspaceEdit); expect(succeeded).toBe(true); } - -export async function expectText(expectedLines: string[]) { - const expectedText = expectedLines.join(EOL); - expect(vscode.window.activeTextEditor!.document.getText()).toBe(expectedText); -} diff --git a/test/lsptoolshost/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts index 139117a5f..8af3553e4 100644 --- a/test/lsptoolshost/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -9,6 +9,8 @@ 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'; export async function activateCSharpExtension(): Promise { const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); @@ -156,3 +158,8 @@ export async function waitForExpectedResult( export async function sleep(ms = 0) { return new Promise((r) => setTimeout(r, ms)); } + +export async function expectText(document: vscode.TextDocument, expectedLines: string[]) { + const expectedText = expectedLines.join(EOL); + expect(document.getText()).toBe(expectedText); +} diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActions.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActions.cs new file mode 100644 index 000000000..ffccc9e36 --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActions.cs @@ -0,0 +1,13 @@ +using System; + +namespace CodeActionsTests; + +class CodeActions +{ + static void Do() { Method(); } + static void Method() + { + var x = 1; + Do(); + } +} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActionsInProject.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActionsInProject.cs new file mode 100644 index 000000000..1f915f73d --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/app/CodeActionsInProject.cs @@ -0,0 +1,7 @@ +using System; + +namespace CodeActionsTests; + +class CodeActionsInProject +{ +} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/CodeActionsInSolution.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/CodeActionsInSolution.cs new file mode 100644 index 000000000..c85d0b8cd --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/test/CodeActionsInSolution.cs @@ -0,0 +1,7 @@ +using System; + +namespace CodeActionsTests; + +class CodeActionsInSolution +{ +} \ No newline at end of file From 883752998d539925b5145533fd98380815ae67a7 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 11 Sep 2024 15:24:21 -0700 Subject: [PATCH 059/100] Update Roslyn to 4.12.0-3.24461.4 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b07006db..31b0dc714 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Update Roslyn to 4.12.0-3.24461.4 (PR: [#7554](https://github.com/dotnet/vscode-csharp/pull/7554)) + * Fix issue where closing sourcelink document threw if not opened (PR: [#75046](https://github.com/dotnet/roslyn/pull/75046)) + * Expose sourcelink option to VSCode (PR: [#75044](https://github.com/dotnet/roslyn/pull/75044)) + * Report source generator failures in Hot Reload diagnostics (PR: [#75029](https://github.com/dotnet/roslyn/pull/75029)) + * Fix issue navigating from source link documents (PR: [#75030](https://github.com/dotnet/roslyn/pull/75030)) * Bump xamltools to 17.12.35311.18 (PR: [#7549](https://github.com/dotnet/vscode-csharp/pull/7549)) * XAML color swatches diff --git a/package.json b/package.json index c8ce59ddb..f53d9866b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.12.0-3.24456.2", + "roslyn": "4.12.0-3.24461.4", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24427.2", "razorOmnisharp": "7.0.0-preview.23363.1", From c6d81c04626c0c625723b3d0effb3e491f76adc1 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 11 Sep 2024 23:18:36 +0000 Subject: [PATCH 060/100] Localization result of 53cff424798129534acc902e92b35c8a2db31fc9. --- package.nls.cs.json | 1 + package.nls.de.json | 1 + package.nls.es.json | 1 + package.nls.fr.json | 1 + package.nls.it.json | 1 + package.nls.ja.json | 1 + package.nls.ko.json | 1 + package.nls.pl.json | 1 + package.nls.pt-br.json | 1 + package.nls.ru.json | 1 + package.nls.tr.json | 1 + package.nls.zh-cn.json | 1 + package.nls.zh-tw.json | 1 + 13 files changed, 13 insertions(+) diff --git a/package.nls.cs.json b/package.nls.cs.json index bf0f25554..5fa75be20 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -55,6 +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.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 fed40a71a..d808fb4db 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -55,6 +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.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 4d8398fd3..83b849f38 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -55,6 +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.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 b6477cf0d..6ca801d36 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -55,6 +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.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 d93ac3802..88e06fc45 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -55,6 +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.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 acce6b533..c52938f70 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -55,6 +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.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 9d5971d93..4cac28482 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -55,6 +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.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 ce1f30c5f..176dd0017 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -55,6 +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.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 76383b5c7..9a7b6e059 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -55,6 +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.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 497c890f5..fd8cd9609 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -55,6 +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.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 816021e0a..bc7fbcc5b 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -55,6 +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.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 104cd54f3..db00a1181 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -55,6 +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.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 01dd47f06..ace6572ce 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -55,6 +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.preferCSharpExtension": "強制專案僅以 C# 延伸模組載入。使用 C# 開發人員套件不支援的舊版專案類型時,這會很有用。(需要重新載入視窗)", "configuration.dotnet.projects.binaryLogPath": "設定載入專案時,寫入 MSBuild 二進位記錄的路徑,以協助診斷載入錯誤。", "configuration.dotnet.projects.enableAutomaticRestore": "如果延伸模組偵測到資產遺失,則啟用自動 NuGet 還原。", From 0f80f5eafa2cd4bf4f81efcc041b5de524aaa052 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 13 Sep 2024 15:47:38 -0700 Subject: [PATCH 061/100] Update Roslyn to 4.12.0-3.24463.6 --- CHANGELOG.md | 10 +++++++++- package.json | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 937d3d656..a6e135efa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,15 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest -* Update Roslyn to 4.12.0-3.24461.4 (PR: [#7554](https://github.com/dotnet/vscode-csharp/pull/7554)) +* 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 +* Do not inject 'debugConsoleVerbosity' for 'coreclr' (PR: [#7546](https://github.com/dotnet/vscode-csharp/pull/7546)) +* Do not auto surround `<`, `[` and `(` in XAML. (PR: [#7540](https://github.com/dotnet/vscode-csharp/pull/7540)) +* Fix resolve fix all code action (PR: [#7536](https://github.com/dotnet/vscode-csharp/pull/7536)) +* Update Roslyn to 4.12.0-3.24463.6 (PR: [#7564](https://github.com/dotnet/vscode-csharp/pull/7564)) + * Fix order modifiers code action not showing up in vscode (PR: [#75092](https://github.com/dotnet/roslyn/pull/75092)) + * Log unit test output (PR: [#75084](https://github.com/dotnet/roslyn/pull/75084)) * Fix issue where closing sourcelink document threw if not opened (PR: [#75046](https://github.com/dotnet/roslyn/pull/75046)) * Expose sourcelink option to VSCode (PR: [#75044](https://github.com/dotnet/roslyn/pull/75044)) * Report source generator failures in Hot Reload diagnostics (PR: [#75029](https://github.com/dotnet/roslyn/pull/75029)) diff --git a/package.json b/package.json index b7ba98d98..eab79cf5b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.12.0-3.24461.4", + "roslyn": "4.12.0-3.24463.6", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24427.2", "razorOmnisharp": "7.0.0-preview.23363.1", From 1f57b28aec24968a251ee5c6e9ebf25980649485 Mon Sep 17 00:00:00 2001 From: dibarbet Date: Sat, 14 Sep 2024 00:32:58 +0000 Subject: [PATCH 062/100] 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 063/100] 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 064/100] 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 065/100] 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 066/100] 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 067/100] 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 068/100] 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 069/100] 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 070/100] 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 071/100] 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 072/100] 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 073/100] 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 074/100] 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 075/100] 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)) From 34089b17d3eadfdb08e6c9872ea8df391bae3603 Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Fri, 20 Sep 2024 23:05:08 +0000 Subject: [PATCH 076/100] Update main version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 1481c3f44..06cfa80ed 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.49", + "version": "2.50", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 82051e83412a742493b8cc4559d5b4a08d8cde89 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 20 Sep 2024 16:39:04 -0700 Subject: [PATCH 077/100] Update Roslyn to 4.12.0-3.24470.4 --- CHANGELOG.md | 10 +++++++--- package.json | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c0ac88d5..94c7edc5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,13 @@ * 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)) * 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)) - +* Bump xamlTools to 17.12.35318.29 (PR: [#7577](https://github.com/dotnet/vscode-csharp/pull/7577)) +* Register Copilot `relatedFilesProvider` for C# (PR: [#7578](https://github.com/dotnet/vscode-csharp/pull/7578)) +* Update Roslyn to 4.12.0-3.24470.4 (PR: [#7589](https://github.com/dotnet/vscode-csharp/pull/7589)) + * Remove ResultId from RelatedDocumentsHandler (PR: [#75176](https://github.com/dotnet/roslyn/pull/75176)) + * Do not attempt to report EnC diagnostics for non-host workspaces (PR: [#75138](https://github.com/dotnet/roslyn/pull/75138)) + * Allow Razor to get diagnostics for cohosting (PR: [#75102](https://github.com/dotnet/roslyn/pull/75102)) +Í # 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)) diff --git a/package.json b/package.json index 188589209..efcbbe5c1 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.12.0-3.24463.6", + "roslyn": "4.12.0-3.24470.4", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24467.1", "razorOmnisharp": "7.0.0-preview.23363.1", @@ -5592,4 +5592,4 @@ } } } -} \ No newline at end of file +} From cef4db028120886a7f52d01eb531540cfc926df1 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 23 Sep 2024 10:31:32 -0700 Subject: [PATCH 078/100] Fix signing log upload --- azure-pipelines/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index fd903d202..d3463d212 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -67,7 +67,6 @@ jobs: PathtoPublish: '$(Build.SourcesDirectory)/vsix' ArtifactName: 'VSIX_$(channel)' - task: 1ES.PublishBuildArtifacts@1 - condition: succeeded() displayName: 'Publish Signing Logs' inputs: PathtoPublish: '$(Build.SourcesDirectory)/out/logs' From 0957c10607ad8f945ee488aa7de089ea3e4c893d Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 23 Sep 2024 11:57:12 -0700 Subject: [PATCH 079/100] Actually fix signing log upload --- azure-pipelines/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index d3463d212..e1a156d5f 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -67,6 +67,7 @@ jobs: PathtoPublish: '$(Build.SourcesDirectory)/vsix' ArtifactName: 'VSIX_$(channel)' - task: 1ES.PublishBuildArtifacts@1 + condition: succeededOrFailed() displayName: 'Publish Signing Logs' inputs: PathtoPublish: '$(Build.SourcesDirectory)/out/logs' From 7fb1769d14ad5b7209169cb3ee91831030baf4c9 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 23 Sep 2024 13:57:37 -0700 Subject: [PATCH 080/100] Add env var for signing debug info --- azure-pipelines/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index e1a156d5f..c0f2ba2b4 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -51,6 +51,7 @@ jobs: displayName: 'Build VSIXs' env: SignType: $(signType) + XSIGN_ARGS: --debug - ${{ if eq(parameters.isOfficial, true) }}: - script: gulp signVsix From 4c3da4883a778cfad1516f720eb75fd2969eb6d9 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 23 Sep 2024 14:00:00 -0700 Subject: [PATCH 081/100] Use python version --- azure-pipelines/build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index c0f2ba2b4..00c4a24ff 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -28,6 +28,11 @@ jobs: parameters: versionNumberOverride: ${{ parameters.versionNumberOverride }} + - task: UsePythonVersion@0 + displayName: 'Use Python 3.11.x' + inputs: + versionSpec: 3.11.x + # If we're in an official build, install the signing plugin - ${{ if eq(parameters.isOfficial, true) }}: - task: MicroBuildSigningPlugin@4 From a8c65d57d8d615010325c13ad7c5232725b67d7e Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 23 Sep 2024 14:20:56 -0700 Subject: [PATCH 082/100] don't specify patch version --- azure-pipelines/build.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 00c4a24ff..606ca3afb 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -29,9 +29,9 @@ jobs: versionNumberOverride: ${{ parameters.versionNumberOverride }} - task: UsePythonVersion@0 - displayName: 'Use Python 3.11.x' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.11.x + versionSpec: 3.11 # If we're in an official build, install the signing plugin - ${{ if eq(parameters.isOfficial, true) }}: @@ -56,7 +56,6 @@ jobs: displayName: 'Build VSIXs' env: SignType: $(signType) - XSIGN_ARGS: --debug - ${{ if eq(parameters.isOfficial, true) }}: - script: gulp signVsix From 72e51d2751a384610224ff4f8f069902b0fb8991 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 5 Sep 2024 17:40:51 -0700 Subject: [PATCH 083/100] Enable no floating promises lint rule --- .eslintrc.js | 3 +- l10n/bundle.l10n.json | 8 +- src/coreclrDebug/activate.ts | 47 ++++--- src/createTmpAsset.ts | 4 +- src/lsptoolshost/commands.ts | 2 +- src/lsptoolshost/languageStatusBar.ts | 6 +- src/lsptoolshost/onAutoInsert.ts | 2 +- src/lsptoolshost/optionChanges.ts | 19 +-- src/lsptoolshost/restore.ts | 4 +- src/lsptoolshost/roslynLanguageServer.ts | 65 +++++---- .../services/buildResultReporterService.ts | 2 +- .../services/projectContextService.ts | 4 +- src/lsptoolshost/showToastNotification.ts | 43 ++---- src/lsptoolshost/unitTesting.ts | 3 +- src/main.ts | 27 ++-- src/omnisharp/engines/lspEngine.ts | 2 +- src/omnisharp/features/commands.ts | 4 +- src/omnisharp/features/diagnosticsProvider.ts | 6 +- src/omnisharp/features/dotnetTest.ts | 14 +- src/omnisharp/features/fixAllProvider.ts | 3 +- .../features/virtualDocumentTracker.ts | 4 +- .../observers/errorMessageObserver.ts | 2 +- .../observers/informationMessageObserver.ts | 9 +- .../observers/omnisharpChannelObserver.ts | 2 +- src/omnisharp/observers/telemetryObserver.ts | 4 +- .../observers/warningMessageObserver.ts | 10 +- src/omnisharp/omnisharpLanguageServer.ts | 24 ++-- src/omnisharp/omnisharpOptionChanges.ts | 21 +-- src/omnisharp/requirementCheck.ts | 12 +- src/omnisharp/server.ts | 8 +- src/razor/razor.ts | 4 +- .../blazorDebugConfigurationProvider.ts | 16 +-- src/razor/src/configurationChangeListener.ts | 21 ++- src/razor/src/csharp/csharpPreviewPanel.ts | 5 +- src/razor/src/diagnostics/reportIssuePanel.ts | 19 +-- .../src/document/razorDocumentManager.ts | 4 +- .../src/dynamicFile/dynamicFileInfoHandler.ts | 2 +- src/razor/src/html/htmlPreviewPanel.ts | 5 +- .../src/html/htmlTagCompletionProvider.ts | 4 +- src/razor/src/razorLanguageServerClient.ts | 7 +- src/shared/assets.ts | 57 ++++---- src/shared/configurationProvider.ts | 124 ++++++++++-------- src/shared/dotnetConfigurationProvider.ts | 4 +- .../observers/utils/messageItemWithCommand.ts | 10 -- .../observers/utils/showErrorMessage.ts | 14 -- .../observers/utils/showInformationMessage.ts | 22 ---- src/shared/observers/utils/showMessage.ts | 108 +++++++++++++++ .../observers/utils/showWarningMessage.ts | 18 --- src/shared/processPicker.ts | 61 +++++---- src/shared/workspaceConfigurationProvider.ts | 10 +- src/vscodeAdapter.ts | 21 ++- tasks/offlinePackagingTasks.ts | 2 +- tasks/testTasks.ts | 6 +- test/fakes.ts | 13 +- .../codeactions.integration.test.ts | 20 +-- .../formatting.integration.test.ts | 6 +- ...formattingEditorConfig.integration.test.ts | 6 +- .../unitTests.integration.test.ts | 2 +- ...languageServerConfigChangeObserver.test.ts | 16 +-- .../integrationHelpers.ts | 6 +- .../launchConfiguration.integration.test.ts | 2 +- .../informationMessageObserver.test.ts | 8 +- .../logging/errorMessageObserver.test.ts | 5 +- .../logging/omnisharpChannelObserver.test.ts | 8 +- .../logging/telemetryObserver.test.ts | 48 +++---- .../omnisharp/omniSharpMonoResolver.test.ts | 4 +- .../omnisharpManager.test.ts | 4 +- .../optionChangeObserver.test.ts | 12 +- .../omnisharpUnitTests/options.test.ts | 38 +++--- .../packages/fileDownloader.test.ts | 2 +- .../packages/zipInstaller.test.ts | 2 +- .../omnisharpUnitTests/testAssets/testZip.ts | 2 +- test/omnisharp/runFeatureTests.ts | 2 + 73 files changed, 624 insertions(+), 490 deletions(-) delete mode 100644 src/shared/observers/utils/messageItemWithCommand.ts delete mode 100644 src/shared/observers/utils/showErrorMessage.ts delete mode 100644 src/shared/observers/utils/showInformationMessage.ts create mode 100644 src/shared/observers/utils/showMessage.ts delete mode 100644 src/shared/observers/utils/showWarningMessage.ts diff --git a/.eslintrc.js b/.eslintrc.js index 050209c7f..01e9bb373 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ module.exports = { }, extends: [ "eslint:recommended", - "plugin:@typescript-eslint/recommended" + "plugin:@typescript-eslint/recommended", ], parser: "@typescript-eslint/parser", parserOptions: { @@ -33,6 +33,7 @@ module.exports = { ], "@typescript-eslint/no-namespace": "off", "@typescript-eslint/promise-function-async": "error", + "@typescript-eslint/no-floating-promises": "error", "prefer-promise-reject-errors": "error", "curly": "error", "prettier/prettier": [ "error", { "endOfLine": "auto" } ], diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index d665bdbbd..5cd775f7c 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -29,13 +29,13 @@ "Can't parse envFile {0} because of {1}": "Can't parse envFile {0} because of {1}", "Open envFile": "Open envFile", "Yes": "Yes", - "Not Now": "Not Now", - "More Information": "More Information", - "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?", "Self-signed certificate sucessfully {0}": "Self-signed certificate sucessfully {0}", "Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}": "Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}", "Show Output": "Show Output", "Couldn't create self-signed certificate. See output for more information.": "Couldn't create self-signed certificate. See output for more information.", + "Not Now": "Not Now", + "More Information": "More Information", + "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?": "The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?", "No executable projects": "No executable projects", "Select the project to launch": "Select the project to launch", "Invalid project index": "Invalid project index", @@ -140,8 +140,8 @@ "OmniSharp requires a complete install of Mono (including MSBuild) to provide language services when `omnisharp.useModernNet` is disabled in Settings. Please install the latest Mono and restart.": "OmniSharp requires a complete install of Mono (including MSBuild) to provide language services when `omnisharp.useModernNet` is disabled in Settings. Please install the latest Mono and restart.", "Download Mono": "Download Mono", "Open settings": "Open settings", - "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change": "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change", "Reload Window": "Reload Window", + "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change": "dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change", "C# configuration has changed. Would you like to relaunch the Language Server with your changes?": "C# configuration has changed. Would you like to relaunch the Language Server with your changes?", "Restart Language Server": "Restart Language Server", "project.json is no longer a supported project format for .NET Core applications.": "project.json is no longer a supported project format for .NET Core applications.", diff --git a/src/coreclrDebug/activate.ts b/src/coreclrDebug/activate.ts index 31f9c7513..cfc07d74a 100644 --- a/src/coreclrDebug/activate.ts +++ b/src/coreclrDebug/activate.ts @@ -20,6 +20,7 @@ import { RemoteAttachPicker } from '../shared/processPicker'; import CompositeDisposable from '../compositeDisposable'; import { BaseVsDbgConfigurationProvider } from '../shared/configurationProvider'; import { omnisharpOptions } from '../shared/options'; +import { ActionOption, showErrorMessage } from '../shared/observers/utils/showMessage'; export async function activate( thisExtension: vscode.Extension, @@ -46,7 +47,7 @@ export async function activate( showInstallErrorMessage(eventStream); } } else if (!CoreClrDebugUtil.existsSync(debugUtil.installCompleteFilePath())) { - completeDebuggerInstall(debugUtil, platformInformation, eventStream); + await completeDebuggerInstall(debugUtil, platformInformation, eventStream); } // register process picker for attach for legacy configurations. @@ -80,7 +81,7 @@ export async function activate( } } - vscode.debug.startDebugging( + await vscode.debug.startDebugging( undefined, { name: '.NET Core Attach', @@ -183,7 +184,8 @@ async function completeDebuggerInstall( const isValidArchitecture = await checkIsValidArchitecture(platformInformation, eventStream); if (!isValidArchitecture) { eventStream.post(new DebuggerNotInstalledFailure()); - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( 'Failed to complete the installation of the C# extension. Please see the error in the output window below.' ) @@ -192,7 +194,7 @@ async function completeDebuggerInstall( } // Write install.complete - CoreClrDebugUtil.writeEmptyFile(debugUtil.installCompleteFilePath()); + await CoreClrDebugUtil.writeEmptyFile(debugUtil.installCompleteFilePath()); return true; } catch (err) { @@ -208,7 +210,8 @@ async function completeDebuggerInstall( function showInstallErrorMessage(eventStream: EventStream) { eventStream.post(new DebuggerNotInstalledFailure()); - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( 'An error occurred during installation of the .NET Debugger. The C# extension may need to be reinstalled.' ) @@ -218,22 +221,28 @@ function showInstallErrorMessage(eventStream: EventStream) { function showDotnetToolsWarning(message: string): void { const config = vscode.workspace.getConfiguration('csharp'); if (!config.get('suppressDotnetInstallWarning', false)) { - const getDotNetMessage = vscode.l10n.t('Get the SDK'); - const goToSettingsMessage = vscode.l10n.t('Disable message in settings'); - const helpMessage = vscode.l10n.t('Help'); + const getDotNetMessage: ActionOption = { + title: vscode.l10n.t('Get the SDK'), + action: async () => { + await vscode.env.openExternal(vscode.Uri.parse('https://dot.net/core-sdk-vscode')); + }, + }; + const goToSettingsMessage: ActionOption = { + title: vscode.l10n.t('Disable message in settings'), + action: async () => { + await vscode.commands.executeCommand('workbench.action.openGlobalSettings'); + }, + }; + const helpMessage: ActionOption = { + title: vscode.l10n.t('Help'), + action: async () => { + await vscode.env.openExternal(vscode.Uri.parse('https://aka.ms/VSCode-CS-DotnetNotFoundHelp')); + }, + }; + // Buttons are shown in right-to-left order, with a close button to the right of everything; // getDotNetMessage will be the first button, then goToSettingsMessage, then the close button. - vscode.window.showErrorMessage(message, goToSettingsMessage, getDotNetMessage, helpMessage).then((value) => { - if (value === getDotNetMessage) { - const dotnetcoreURL = 'https://dot.net/core-sdk-vscode'; - vscode.env.openExternal(vscode.Uri.parse(dotnetcoreURL)); - } else if (value === goToSettingsMessage) { - vscode.commands.executeCommand('workbench.action.openGlobalSettings'); - } else if (value == helpMessage) { - const helpURL = 'https://aka.ms/VSCode-CS-DotnetNotFoundHelp'; - vscode.env.openExternal(vscode.Uri.parse(helpURL)); - } - }); + showErrorMessage(vscode, message, goToSettingsMessage, getDotNetMessage, helpMessage); } } diff --git a/src/createTmpAsset.ts b/src/createTmpAsset.ts index 1a36de180..b23223866 100644 --- a/src/createTmpAsset.ts +++ b/src/createTmpAsset.ts @@ -43,7 +43,9 @@ export async function CreateTmpDir(unsafeCleanup: boolean): Promise { name: tmpDir.name, dispose: () => { if (unsafeCleanup) { - rimraf(tmpDir.name); //to delete directories that have folders inside them + rimraf(tmpDir.name).catch((rejectReason) => { + throw new Error(`Failed to cleanup ${tmpDir.name} at ${tmpDir.fd}: ${rejectReason}`); + }); //to delete directories that have folders inside them } else { tmpDir.removeCallback(); } diff --git a/src/lsptoolshost/commands.ts b/src/lsptoolshost/commands.ts index b5e42ad23..387e35d22 100644 --- a/src/lsptoolshost/commands.ts +++ b/src/lsptoolshost/commands.ts @@ -187,7 +187,7 @@ async function openSolution(languageServer: RoslynLanguageServer): Promise { item.text = e.context._vs_label; }); - projectContextService.refresh(); + + // Trigger a refresh, but don't block creation on the refresh completing. + projectContextService.refresh().catch((e) => { + throw new Error(`Error refreshing project context status ${e}`); + }); } } diff --git a/src/lsptoolshost/onAutoInsert.ts b/src/lsptoolshost/onAutoInsert.ts index ca1a8ce9f..71ef4198a 100644 --- a/src/lsptoolshost/onAutoInsert.ts +++ b/src/lsptoolshost/onAutoInsert.ts @@ -110,7 +110,7 @@ async function applyAutoInsertEdit( } if (response.command !== undefined) { - vscode.commands.executeCommand(response.command.command, response.command.arguments); + await vscode.commands.executeCommand(response.command.command, response.command.arguments); } } } diff --git a/src/lsptoolshost/optionChanges.ts b/src/lsptoolshost/optionChanges.ts index e71fe24ac..1536eb47f 100644 --- a/src/lsptoolshost/optionChanges.ts +++ b/src/lsptoolshost/optionChanges.ts @@ -7,8 +7,8 @@ import * as vscode from 'vscode'; import { Observable } from 'rxjs'; import { CommonOptionsThatTriggerReload, LanguageServerOptionsThatTriggerReload } from '../shared/options'; import { HandleOptionChanges, OptionChangeObserver, OptionChanges } from '../shared/observers/optionChangeObserver'; -import ShowInformationMessage from '../shared/observers/utils/showInformationMessage'; import Disposable from '../disposable'; +import { CommandOption, showInformationMessage } from '../shared/observers/utils/showMessage'; export function registerLanguageServerOptionChanges(optionObservable: Observable): Disposable { const optionChangeObserver: OptionChangeObserver = { @@ -34,19 +34,19 @@ function handleLanguageServerOptionChanges(changedOptions: OptionChanges): void return; } - const reloadTitle = vscode.l10n.t('Reload Window'); - const reloadCommand = 'workbench.action.reloadWindow'; + const reloadTitle: CommandOption = { + title: vscode.l10n.t('Reload Window'), + command: 'workbench.action.reloadWindow', + }; if (changedOptions.changedCommonOptions.find((key) => key === 'useOmnisharpServer')) { // If the user has changed the useOmnisharpServer flag we need to reload the window. - ShowInformationMessage( + // Intentionally not awaiting this promise - we don't want to block handling changes on showing the notification prompt. + showInformationMessage( vscode, vscode.l10n.t( 'dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change' ), - { - title: reloadTitle, - command: reloadCommand, - } + reloadTitle ); return; } @@ -56,5 +56,6 @@ function handleLanguageServerOptionChanges(changedOptions: OptionChanges): void const message = vscode.l10n.t( 'C# configuration has changed. Would you like to reload the window to apply your changes?' ); - ShowInformationMessage(vscode, message, { title: reloadTitle, command: reloadCommand }); + // Intentionally not awaiting this promise - we don't want to block handling changes on showing the notification prompt. + showInformationMessage(vscode, message, reloadTitle); } diff --git a/src/lsptoolshost/restore.ts b/src/lsptoolshost/restore.ts index ff5290e72..9f3ba51d8 100644 --- a/src/lsptoolshost/restore.ts +++ b/src/lsptoolshost/restore.ts @@ -13,6 +13,7 @@ import { ProjectNeedsRestoreRequest, } from './roslynProtocol'; import path = require('path'); +import { showErrorMessage } from '../shared/observers/utils/showMessage'; let _restoreInProgress = false; @@ -79,7 +80,8 @@ export async function restore( showOutput: boolean ): Promise { if (_restoreInProgress) { - vscode.window.showErrorMessage(vscode.l10n.t('Restore already in progress')); + // Show error message but don't await the dismissal of it. + showErrorMessage(vscode, vscode.l10n.t('Restore already in progress')); return; } _restoreInProgress = true; diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index e525eec57..5a621c2a5 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -33,7 +33,6 @@ import { import { PlatformInformation } from '../shared/platform'; import { readConfigurations } from './configurationMiddleware'; import { DynamicFileInfoHandler } from '../razor/src/dynamicFile/dynamicFileInfoHandler'; -import ShowInformationMessage from '../shared/observers/utils/showInformationMessage'; import * as RoslynProtocol from './roslynProtocol'; import { CSharpDevKitExports } from '../csharpDevKitExports'; import { SolutionSnapshotId } from './services/ISolutionSnapshotProvider'; @@ -69,6 +68,12 @@ import { ProjectContextService } from './services/projectContextService'; import { ProvideDynamicFileResponse } from '../razor/src/dynamicFile/provideDynamicFileResponse'; import { ProvideDynamicFileParams } from '../razor/src/dynamicFile/provideDynamicFileParams'; import { registerCopilotExtensionAsync } from './copilot'; +import { + ActionOption, + CommandOption, + showErrorMessage, + showInformationMessage, +} from '../shared/observers/utils/showMessage'; let _channel: vscode.OutputChannel; let _traceChannel: vscode.OutputChannel; @@ -458,13 +463,13 @@ export class RoslynLanguageServer { const defaultSolution = commonOptions.defaultSolution; if (!_wasActivatedWithCSharpDevkit && defaultSolution !== 'disable' && this._solutionFile === undefined) { if (defaultSolution !== '') { - this.openSolution(vscode.Uri.file(defaultSolution)); + await this.openSolution(vscode.Uri.file(defaultSolution)); } else { // Auto open if there is just one solution target; if there's more the one we'll just let the user pick with the picker. const solutionUris = await vscode.workspace.findFiles('**/*.sln', '**/node_modules/**', 2); if (solutionUris) { if (solutionUris.length === 1) { - this.openSolution(solutionUris[0]); + await this.openSolution(solutionUris[0]); } else if (solutionUris.length > 1) { // We have more than one solution, so we'll prompt the user to use the picker. const chosen = await vscode.window.showInformationMessage( @@ -478,14 +483,16 @@ export class RoslynLanguageServer { if (chosen) { if (chosen.action === 'disable') { - vscode.workspace.getConfiguration().update('dotnet.defaultSolution', 'disable', false); + await vscode.workspace + .getConfiguration() + .update('dotnet.defaultSolution', 'disable', false); } else { const chosenSolution: vscode.Uri | undefined = await vscode.commands.executeCommand( 'dotnet.openSolution' ); if (chosen.action === 'openAndSetDefault' && chosenSolution) { const relativePath = vscode.workspace.asRelativePath(chosenSolution); - vscode.workspace + await vscode.workspace .getConfiguration() .update('dotnet.defaultSolution', relativePath, false); } @@ -499,7 +506,7 @@ export class RoslynLanguageServer { omnisharpOptions.maxProjectResults ); - this.openProjects(projectUris); + await this.openProjects(projectUris); } } } @@ -517,7 +524,7 @@ export class RoslynLanguageServer { // then we have no projects, and so this extension won't have anything to do. if (exports.hasServerProcessLoaded()) { const pipeName = await exports.getBrokeredServiceServerPipeName(); - this._languageClient.sendNotification('serviceBroker/connect', { pipeName: pipeName }); + await this._languageClient.sendNotification('serviceBroker/connect', { pipeName: pipeName }); } else { // We'll subscribe if the process later launches, and call this function again to send the pipe name. this._context.subscriptions.push( @@ -591,7 +598,7 @@ export class RoslynLanguageServer { } // Set command enablement as soon as we know devkit is available. - vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'RoslynDevKit'); + await vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'RoslynDevKit'); const csharpDevKitArgs = this.getCSharpDevKitExportArgs(additionalExtensionPaths); args = args.concat(csharpDevKitArgs); @@ -602,7 +609,7 @@ export class RoslynLanguageServer { _channel.appendLine('Activating C# standalone...'); // Set command enablement to use roslyn standalone commands. - vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'Roslyn'); + await vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'Roslyn'); _wasActivatedWithCSharpDevkit = false; } @@ -824,7 +831,7 @@ export class RoslynLanguageServer { vscode.workspace.onDidOpenTextDocument(async (event) => { try { const buildIds = await this.getBuildOnlyDiagnosticIds(CancellationToken.None); - this._buildDiagnosticService._onFileOpened(event, buildIds); + await this._buildDiagnosticService._onFileOpened(event, buildIds); } catch (e) { if (e instanceof vscode.CancellationError) { // The request was cancelled (not due to us) - this means the server is no longer accepting requests @@ -850,14 +857,16 @@ export class RoslynLanguageServer { return; } - const title = vscode.l10n.t('Restart Language Server'); - const command = 'dotnet.restartServer'; + const title: CommandOption = { + title: vscode.l10n.t('Restart Language Server'), + command: 'dotnet.restartServer', + }; if (csharpDevkitExtension && !_wasActivatedWithCSharpDevkit) { // We previously started without C# Dev Kit and its now installed. // Offer a prompt to restart the server to use C# Dev Kit. _channel.appendLine(`Detected new installation of ${csharpDevkitExtensionId}`); const message = `Detected installation of ${csharpDevkitExtensionId}. Would you like to relaunch the language server for added features?`; - ShowInformationMessage(vscode, message, { title, command }); + showInformationMessage(vscode, message, title); } else { // Any other change to extensions is irrelevant - an uninstall requires a reload of the window // which will automatically restart this extension too. @@ -870,12 +879,14 @@ export class RoslynLanguageServer { // Subscribe to telemetry events so we can enable/disable as needed this._languageClient.addDisposable( vscode.env.onDidChangeTelemetryEnabled((_: boolean) => { - const title = vscode.l10n.t('Restart Language Server'); - const command = 'dotnet.restartServer'; + const restart: CommandOption = { + title: vscode.l10n.t('Restart Language Server'), + command: 'dotnet.restartServer', + }; const message = vscode.l10n.t( 'Detected change in telemetry settings. These will not take effect until the language server is restarted, would you like to restart?' ); - ShowInformationMessage(vscode, message, { title, command }); + showInformationMessage(vscode, message, restart); }) ); } @@ -931,17 +942,21 @@ export class RoslynLanguageServer { 'IntelliCode features will not be available, {0} failed to activate.', csharpDevkitIntelliCodeExtensionId ); - const showOutput = vscode.l10n.t('Go to output'); - const suppressNotification = vscode.l10n.t('Suppress notification'); - // Buttons are shown in right-to-left order, with a close button to the right of everything; - vscode.window.showErrorMessage(message, showOutput, suppressNotification).then((value) => { - if (value === showOutput) { + const showOutput: ActionOption = { + title: vscode.l10n.t('Go to output'), + action: async () => { _channel.show(); - } else if (value == suppressNotification) { - extensionContext.globalState.update(stateKey, true); - } - }); + }, + }; + const suppressNotification: ActionOption = { + title: vscode.l10n.t('Suppress notification'), + action: async () => { + await extensionContext.globalState.update(stateKey, true); + }, + }; + // Buttons are shown in right-to-left order, with a close button to the right of everything; + showErrorMessage(vscode, message, showOutput, suppressNotification); return []; } } diff --git a/src/lsptoolshost/services/buildResultReporterService.ts b/src/lsptoolshost/services/buildResultReporterService.ts index 81230f7c7..4b26a8196 100644 --- a/src/lsptoolshost/services/buildResultReporterService.ts +++ b/src/lsptoolshost/services/buildResultReporterService.ts @@ -25,6 +25,6 @@ export class BuildResultDiagnostics implements IBuildResultDiagnostics { public async reportBuildResult(buildDiagnostics: { [uri: string]: vscode.Diagnostic[] }): Promise { const langServer: RoslynLanguageServer = await this._languageServerPromise; const buildOnlyIds: string[] = await langServer.getBuildOnlyDiagnosticIds(CancellationToken.None); - langServer._buildDiagnosticService.setBuildDiagnostics(buildDiagnostics, buildOnlyIds); + await langServer._buildDiagnosticService.setBuildDiagnostics(buildDiagnostics, buildOnlyIds); } } diff --git a/src/lsptoolshost/services/projectContextService.ts b/src/lsptoolshost/services/projectContextService.ts index ddddba91a..577b04f82 100644 --- a/src/lsptoolshost/services/projectContextService.ts +++ b/src/lsptoolshost/services/projectContextService.ts @@ -29,12 +29,12 @@ export class ProjectContextService { }; constructor(private _languageServer: RoslynLanguageServer, _languageServerEvents: LanguageServerEvents) { - _languageServerEvents.onServerStateChange((e) => { + _languageServerEvents.onServerStateChange(async (e) => { // When the project initialization is complete, open files // could move from the miscellaneous workspace context into // an open project. if (e.state === ServerState.Stopped || e.state === ServerState.ProjectInitializationComplete) { - this.refresh(); + await this.refresh(); } }); diff --git a/src/lsptoolshost/showToastNotification.ts b/src/lsptoolshost/showToastNotification.ts index df57ac54f..f2e2c972c 100644 --- a/src/lsptoolshost/showToastNotification.ts +++ b/src/lsptoolshost/showToastNotification.ts @@ -7,50 +7,29 @@ import * as vscode from 'vscode'; import { RoslynLanguageClient } from './roslynLanguageClient'; import { MessageType } from 'vscode-languageserver-protocol'; import { ShowToastNotification } from './roslynProtocol'; +import { showErrorMessage, showInformationMessage, showWarningMessage } from '../shared/observers/utils/showMessage'; export function registerShowToastNotification(client: RoslynLanguageClient) { client.onNotification(ShowToastNotification.type, async (notification) => { - const messageOptions: vscode.MessageOptions = { - modal: false, - }; - const commands = notification.commands.map((command) => command.title); - const executeCommandByName = async (result: string | undefined) => { - if (result) { - const command = notification.commands.find((command) => command.title === result); - if (!command) { - throw new Error(`Unknown command ${result}`); - } - - if (command.arguments) { - await vscode.commands.executeCommand(command.command, ...command.arguments); - } else { - await vscode.commands.executeCommand(command.command); - } - } - }; + const buttonOptions = notification.commands.map((command) => { + return { + title: command.title, + command: command.command, + arguments: command.arguments, + }; + }); switch (notification.messageType) { case MessageType.Error: { - const result = await vscode.window.showErrorMessage(notification.message, messageOptions, ...commands); - executeCommandByName(result); + showErrorMessage(vscode, notification.message, ...buttonOptions); break; } case MessageType.Warning: { - const result = await vscode.window.showWarningMessage( - notification.message, - messageOptions, - ...commands - ); - executeCommandByName(result); + showWarningMessage(vscode, notification.message, ...buttonOptions); break; } default: { - const result = await vscode.window.showInformationMessage( - notification.message, - messageOptions, - ...commands - ); - executeCommandByName(result); + showInformationMessage(vscode, notification.message, ...buttonOptions); break; } } diff --git a/src/lsptoolshost/unitTesting.ts b/src/lsptoolshost/unitTesting.ts index 84cb1d844..27da8f892 100644 --- a/src/lsptoolshost/unitTesting.ts +++ b/src/lsptoolshost/unitTesting.ts @@ -11,6 +11,7 @@ import { RoslynLanguageServer } from './roslynLanguageServer'; import { RunTestsParams, RunTestsPartialResult, RunTestsRequest, TestProgress } from './roslynProtocol'; import { commonOptions } from '../shared/options'; import { UriConverter } from './uriConverter'; +import { showErrorMessage } from '../shared/observers/utils/showMessage'; export function registerUnitTestingCommands( context: vscode.ExtensionContext, @@ -68,7 +69,7 @@ async function runTests( dotnetTestChannel: vscode.OutputChannel ): Promise { if (_testRunInProgress) { - vscode.window.showErrorMessage(vscode.l10n.t('Test run already in progress')); + showErrorMessage(vscode, vscode.l10n.t('Test run already in progress')); return; } diff --git a/src/main.ts b/src/main.ts index 7e84e9f10..3e560dc32 100644 --- a/src/main.ts +++ b/src/main.ts @@ -40,6 +40,7 @@ import { BuildResultDiagnostics } from './lsptoolshost/services/buildResultRepor import { debugSessionTracker } from './coreclrDebug/provisionalDebugSessionTracker'; import { getComponentFolder } from './lsptoolshost/builtInComponents'; import { activateOmniSharpLanguageServer, ActivationResult } from './omnisharp/omnisharpLanguageServer'; +import { ActionOption, showErrorMessage } from './shared/observers/utils/showMessage'; export async function activate( context: vscode.ExtensionContext @@ -175,28 +176,28 @@ export async function activate( if (!isSupportedPlatform(platformInfo)) { // Check to see if VS Code is running remotely if (context.extension.extensionKind === vscode.ExtensionKind.Workspace) { - const setupButton = vscode.l10n.t('How to setup Remote Debugging'); + const setupButton: ActionOption = { + title: vscode.l10n.t('How to setup Remote Debugging'), + action: async () => { + const remoteDebugInfoURL = + 'https://github.com/dotnet/vscode-csharp/wiki/Remote-Debugging-On-Linux-Arm'; + await vscode.env.openExternal(vscode.Uri.parse(remoteDebugInfoURL)); + }, + }; const errorMessage = vscode.l10n.t( `The C# extension for Visual Studio Code is incompatible on {0} {1} with the VS Code Remote Extensions. To see avaliable workarounds, click on '{2}'.`, platformInfo.platform, platformInfo.architecture, - setupButton + setupButton.title ); - - await vscode.window.showErrorMessage(errorMessage, setupButton).then((selectedItem) => { - if (selectedItem === setupButton) { - const remoteDebugInfoURL = - 'https://github.com/dotnet/vscode-csharp/wiki/Remote-Debugging-On-Linux-Arm'; - vscode.env.openExternal(vscode.Uri.parse(remoteDebugInfoURL)); - } - }); + showErrorMessage(vscode, errorMessage, setupButton); } else { const errorMessage = vscode.l10n.t( 'The C# extension for Visual Studio Code is incompatible on {0} {1}.', platformInfo.platform, platformInfo.architecture ); - await vscode.window.showErrorMessage(errorMessage); + showErrorMessage(vscode, errorMessage); } // Unsupported platform @@ -294,10 +295,10 @@ function tryGetCSharpDevKitExtensionExports(csharpLogObserver: CsharpLoggerObser // Notify the vsdbg configuration provider that C# dev kit has been loaded. exports.serverProcessLoaded(async () => { - debugSessionTracker.onCsDevKitInitialized(await exports.getBrokeredServiceServerPipeName()); + await debugSessionTracker.onCsDevKitInitialized(await exports.getBrokeredServiceServerPipeName()); }); - vscode.commands.executeCommand('setContext', 'dotnet.debug.serviceBrokerAvailable', true); + await vscode.commands.executeCommand('setContext', 'dotnet.debug.serviceBrokerAvailable', true); } else { csharpLogObserver.logger.appendLine( `[ERROR] '${csharpDevkitExtensionId}' activated but did not return expected Exports.` diff --git a/src/omnisharp/engines/lspEngine.ts b/src/omnisharp/engines/lspEngine.ts index 1c2ec0e22..612487d17 100644 --- a/src/omnisharp/engines/lspEngine.ts +++ b/src/omnisharp/engines/lspEngine.ts @@ -247,7 +247,7 @@ export class LspEngine implements IEngine { }; const client = new LanguageClient('Omnisharp Server', serverOptions, clientOptions); - client.setTrace(Trace.Verbose); + await client.setTrace(Trace.Verbose); // The goal here is to disable all the features and light them up over time. const features: (StaticFeature | DynamicFeature)[] = (client as any)._features; diff --git a/src/omnisharp/features/commands.ts b/src/omnisharp/features/commands.ts index bbffef58a..98113385a 100644 --- a/src/omnisharp/features/commands.ts +++ b/src/omnisharp/features/commands.ts @@ -82,9 +82,9 @@ export default function registerCommands( async function restartOmniSharp(context: vscode.ExtensionContext, server: OmniSharpServer) { if (server.isRunning()) { - server.restart(); + await server.restart(); } else { - server.autoStart(''); + await server.autoStart(''); } } diff --git a/src/omnisharp/features/diagnosticsProvider.ts b/src/omnisharp/features/diagnosticsProvider.ts index 9bf31235a..2d31cbb0d 100644 --- a/src/omnisharp/features/diagnosticsProvider.ts +++ b/src/omnisharp/features/diagnosticsProvider.ts @@ -159,11 +159,11 @@ class OmniSharpDiagnosticsProvider extends AbstractSupport { } this._subscriptions.push( - this._validateAllPipe.pipe(debounceTime(3000)).subscribe(() => { + this._validateAllPipe.pipe(debounceTime(3000)).subscribe(async () => { if (this._validationAdvisor.shouldValidateAll()) { - this._validateEntireWorkspace(); + await this._validateEntireWorkspace(); } else if (this._validationAdvisor.shouldValidateFiles()) { - this._validateOpenDocuments(); + await this._validateOpenDocuments(); } }) ); diff --git a/src/omnisharp/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts index a7bf07204..e333f9fdd 100644 --- a/src/omnisharp/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -704,7 +704,7 @@ class DebugEventListener { DebugEventListener.s_activeInstance = this; const serverSocket = net.createServer((socket) => { - socket.on('data', (buffer) => { + socket.on('data', async (buffer) => { let event: DebuggerEventsProtocol.DebuggerEvent; try { event = DebuggerEventsProtocol.decodePacket(buffer); @@ -717,19 +717,19 @@ class DebugEventListener { case DebuggerEventsProtocol.ProcessLaunched: { const processLaunchedEvent = event; this._eventStream.post(new DotNetTestDebugProcessStart(processLaunchedEvent.targetProcessId)); - this.onProcessLaunched(processLaunchedEvent.targetProcessId); + await this.onProcessLaunched(processLaunchedEvent.targetProcessId); break; } case DebuggerEventsProtocol.DebuggingStopped: this._eventStream.post(new DotNetTestDebugComplete()); - this.onDebuggingStopped(); + await this.onDebuggingStopped(); break; } }); - socket.on('end', () => { - this.onDebuggingStopped(); + socket.on('end', async () => { + await this.onDebuggingStopped(); }); }); @@ -792,7 +792,7 @@ class DebugEventListener { } } - private onDebuggingStopped(): void { + private async onDebuggingStopped(): Promise { if (this._isClosed) { return; } @@ -801,7 +801,7 @@ class DebugEventListener { FileName: this._fileName, }; try { - serverUtils.debugTestStop(this._server, request); + await serverUtils.debugTestStop(this._server, request); this.close(); } catch (_) { return; diff --git a/src/omnisharp/features/fixAllProvider.ts b/src/omnisharp/features/fixAllProvider.ts index e067b22a3..82296c676 100644 --- a/src/omnisharp/features/fixAllProvider.ts +++ b/src/omnisharp/features/fixAllProvider.ts @@ -13,6 +13,7 @@ import AbstractProvider from './abstractProvider'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import { buildEditForResponse } from '../fileOperationsResponseEditBuilder'; import { CancellationToken } from 'vscode-languageserver-protocol'; +import { showWarningMessage } from '../../shared/observers/utils/showMessage'; export class OmniSharpFixAllProvider extends AbstractProvider implements vscode.CodeActionProvider { public static fixAllCodeActionKind = vscode.CodeActionKind.SourceFixAll.append('csharp'); @@ -63,7 +64,7 @@ export class OmniSharpFixAllProvider extends AbstractProvider implements vscode. private async fixAllMenu(server: OmniSharpServer, scope: protocol.FixAllScope): Promise { const fileName = vscode.window.activeTextEditor?.document.fileName; if (fileName === undefined) { - vscode.window.showWarningMessage(vscode.l10n.t('Text editor must be focused to fix all issues')); + showWarningMessage(vscode, vscode.l10n.t('Text editor must be focused to fix all issues')); return; } diff --git a/src/omnisharp/features/virtualDocumentTracker.ts b/src/omnisharp/features/virtualDocumentTracker.ts index b46cf9d16..1fd67f63a 100644 --- a/src/omnisharp/features/virtualDocumentTracker.ts +++ b/src/omnisharp/features/virtualDocumentTracker.ts @@ -136,7 +136,9 @@ function logSynchronizationFailure(uri: Uri, error: any, server: OmniSharpServer } export default function trackVirtualDocuments(server: OmniSharpServer, eventStream: EventStream): IDisposable { - trackCurrentVirtualDocuments(server, eventStream); + trackCurrentVirtualDocuments(server, eventStream).catch((any) => { + throw new Error(`Failed to track current virtual documents: ${any}`); + }); const disposable = trackFutureVirtualDocuments(server, eventStream); return disposable; diff --git a/src/omnisharp/observers/errorMessageObserver.ts b/src/omnisharp/observers/errorMessageObserver.ts index 410098aa0..2ac535689 100644 --- a/src/omnisharp/observers/errorMessageObserver.ts +++ b/src/omnisharp/observers/errorMessageObserver.ts @@ -6,9 +6,9 @@ import { BaseEvent, IntegrityCheckFailure, ZipError } from '../../shared/loggingEvents'; import { DotNetTestRunFailure, DotNetTestDebugStartFailure } from '../omnisharpLoggingEvents'; import { vscode } from '../../vscodeAdapter'; -import showErrorMessage from '../../shared/observers/utils/showErrorMessage'; import { EventType } from '../../shared/eventType'; import { l10n } from 'vscode'; +import { showErrorMessage } from '../../shared/observers/utils/showMessage'; export class ErrorMessageObserver { constructor(private vscode: vscode) {} diff --git a/src/omnisharp/observers/informationMessageObserver.ts b/src/omnisharp/observers/informationMessageObserver.ts index 24ef9ca34..8579793fa 100644 --- a/src/omnisharp/observers/informationMessageObserver.ts +++ b/src/omnisharp/observers/informationMessageObserver.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { vscode } from '../../vscodeAdapter'; -import showInformationMessage from '../../shared/observers/utils/showInformationMessage'; import { EventType } from '../../shared/eventType'; import { omnisharpOptions } from '../../shared/options'; import { l10n } from 'vscode'; import { BaseEvent } from '../../shared/loggingEvents'; +import { CommandOption, showInformationMessage } from '../../shared/observers/utils/showMessage'; export class InformationMessageObserver { constructor(private vscode: vscode) {} @@ -21,16 +21,17 @@ export class InformationMessageObserver { } }; - private async handleOmnisharpServerUnresolvedDependencies() { + private handleOmnisharpServerUnresolvedDependencies() { //to do: determine if we need the unresolved dependencies message if (!omnisharpOptions.suppressDotnetRestoreNotification) { const message = l10n.t( `There are unresolved dependencies. Please execute the restore command to continue.` ); - return showInformationMessage(this.vscode, message, { + const buttonTitle: CommandOption = { title: l10n.t('Restore'), command: 'dotnet.restore.all', - }); + }; + showInformationMessage(this.vscode, message, buttonTitle); } } } diff --git a/src/omnisharp/observers/omnisharpChannelObserver.ts b/src/omnisharp/observers/omnisharpChannelObserver.ts index e5f5b9c1b..a47fd3d5c 100644 --- a/src/omnisharp/observers/omnisharpChannelObserver.ts +++ b/src/omnisharp/observers/omnisharpChannelObserver.ts @@ -29,7 +29,7 @@ export class OmnisharpChannelObserver extends BaseChannelObserver { } }; - private async handleOmnisharpServerOnStdErr() { + private handleOmnisharpServerOnStdErr() { if (omnisharpOptions.showOmnisharpLogOnError) { this.showChannel(true); } diff --git a/src/omnisharp/observers/telemetryObserver.ts b/src/omnisharp/observers/telemetryObserver.ts index a5477913a..35a29f3c1 100644 --- a/src/omnisharp/observers/telemetryObserver.ts +++ b/src/omnisharp/observers/telemetryObserver.ts @@ -33,11 +33,11 @@ export class TelemetryObserver { this.useModernNet = useModernNet; } - public post = (event: BaseEvent) => { + public post = async (event: BaseEvent) => { const telemetryProps = getTelemetryProps(this.platformInfo); switch (event.type) { case EventType.OmnisharpInitialisation: - this.handleOmnisharpInitialisation(event); + await this.handleOmnisharpInitialisation(event); break; case EventType.PackageInstallation: this.reporter.sendTelemetryEvent('AcquisitionStart'); diff --git a/src/omnisharp/observers/warningMessageObserver.ts b/src/omnisharp/observers/warningMessageObserver.ts index 415554967..2b4073ffe 100644 --- a/src/omnisharp/observers/warningMessageObserver.ts +++ b/src/omnisharp/observers/warningMessageObserver.ts @@ -9,18 +9,22 @@ import { BaseEvent } from '../../shared/loggingEvents'; import { OmnisharpServerMsBuildProjectDiagnostics } from '../omnisharpLoggingEvents'; import { Scheduler, Subject } from 'rxjs'; -import showWarningMessage from '../../shared/observers/utils/showWarningMessage'; import { EventType } from '../../shared/eventType'; import { l10n } from 'vscode'; +import { CommandOption, showWarningMessage } from '../../shared/observers/utils/showMessage'; export class WarningMessageObserver { private warningMessageDebouncer: Subject; constructor(private vscode: vscode, private disableMsBuildDiagnosticWarning: () => boolean, scheduler?: Scheduler) { this.warningMessageDebouncer = new Subject(); - this.warningMessageDebouncer.pipe(debounceTime(1500, scheduler)).subscribe(async (_) => { + this.warningMessageDebouncer.pipe(debounceTime(1500, scheduler)).subscribe((_) => { const message = l10n.t('Some projects have trouble loading. Please review the output for more details.'); - await showWarningMessage(this.vscode, message, { title: l10n.t('Show Output'), command: 'o.showOutput' }); + const buttonTitle: CommandOption = { + title: l10n.t('Show Output'), + command: 'o.showOutput', + }; + showWarningMessage(this.vscode, message, buttonTitle); }); } diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index 19aed0d44..bd9be3cdb 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -50,6 +50,7 @@ import { ITelemetryReporter } from '../shared/telemetryReporter'; import { Observable } from 'rxjs'; import { registerOmnisharpOptionChanges } from './omnisharpOptionChanges'; import { CSharpLoggerObserver } from './observers/csharpLoggerObserver'; +import { showWarningMessage } from '../shared/observers/utils/showMessage'; export interface ActivationResult { readonly server: OmniSharpServer; @@ -249,16 +250,15 @@ async function activate( const csharpConfig = vscode.workspace.getConfiguration('csharp'); if (!csharpConfig.get('suppressProjectJsonWarning')) { disposables.add( - server.onServerStart(() => { - utils.requestWorkspaceInformation(server).then((workspaceInfo) => { + server.onServerStart(async () => { + await utils.requestWorkspaceInformation(server).then((workspaceInfo) => { if (workspaceInfo.DotNet && workspaceInfo.DotNet.Projects.length > 0) { const shortMessage = vscode.l10n.t( 'project.json is no longer a supported project format for .NET Core applications.' ); - const moreDetailItem: vscode.MessageItem = { title: vscode.l10n.t('More Detail') }; - vscode.window.showWarningMessage(shortMessage, moreDetailItem).then((_) => { - eventStream.post(new ProjectJsonDeprecatedWarning()); - }); + const moreDetailItem = vscode.l10n.t('More Detail'); + eventStream.post(new ProjectJsonDeprecatedWarning()); + showWarningMessage(vscode, shortMessage, moreDetailItem); } }); }) @@ -267,10 +267,10 @@ async function activate( // Send telemetry about the sorts of projects the server was started on. disposables.add( - server.onServerStart(() => { + server.onServerStart(async () => { const measures: { [key: string]: number } = {}; - utils.requestWorkspaceInformation(server).then((workspaceInfo) => { + await utils.requestWorkspaceInformation(server).then((workspaceInfo) => { if (workspaceInfo.DotNet && workspaceInfo.DotNet.Projects.length > 0) { measures['projectjson.projectcount'] = workspaceInfo.DotNet.Projects.length; measures['projectjson.filecount'] = sum(workspaceInfo.DotNet.Projects, (p) => @@ -299,18 +299,18 @@ async function activate( ); disposables.add( - server.onBeforeServerStart((path) => { + server.onBeforeServerStart(async (path) => { if (razorOptions.razorDevMode) { eventStream.post(new RazorDevModeActive()); } // read and store last solution or folder path - context.workspaceState.update('lastSolutionPathOrFolder', path); + await context.workspaceState.update('lastSolutionPathOrFolder', path); }) ); if (omnisharpOptions.autoStart) { - server.autoStart(context.workspaceState.get('lastSolutionPathOrFolder', '')); + await server.autoStart(context.workspaceState.get('lastSolutionPathOrFolder', '')); } // stop server on deactivate @@ -318,7 +318,7 @@ async function activate( new Disposable(() => { testManager.dispose(); advisor.dispose(); - server.stop(); + server.stop().catch((err) => console.error(err)); }) ); diff --git a/src/omnisharp/omnisharpOptionChanges.ts b/src/omnisharp/omnisharpOptionChanges.ts index 7b56b8eb7..880f9e742 100644 --- a/src/omnisharp/omnisharpOptionChanges.ts +++ b/src/omnisharp/omnisharpOptionChanges.ts @@ -6,9 +6,9 @@ import * as vscode from 'vscode'; import { HandleOptionChanges, OptionChangeObserver } from '../shared/observers/optionChangeObserver'; import { CommonOptionsThatTriggerReload, OmnisharpOptionsThatTriggerReload } from '../shared/options'; -import ShowInformationMessage from '../shared/observers/utils/showInformationMessage'; import { Observable } from 'rxjs'; import Disposable from '../disposable'; +import { CommandOption, showInformationMessage } from '../shared/observers/utils/showMessage'; export function registerOmnisharpOptionChanges(optionObservable: Observable): Disposable { const optionChangeObserver: OptionChangeObserver = { @@ -21,16 +21,17 @@ export function registerOmnisharpOptionChanges(optionObservable: Observable key === 'useOmnisharpServer')) { + const reload: CommandOption = { + title: vscode.l10n.t('Reload Window'), + command: 'workbench.action.reloadWindow', + }; // If the user has changed the useOmnisharpServer flag we need to reload the window. - ShowInformationMessage( + showInformationMessage( vscode, vscode.l10n.t( 'dotnet.server.useOmnisharp option has changed. Please reload the window to apply the change' ), - { - title: vscode.l10n.t('Reload Window'), - command: 'workbench.action.reloadWindow', - } + reload ); return; } @@ -38,9 +39,11 @@ export function registerOmnisharpOptionChanges(optionObservable: Observable { if (downloadSdk === PromptResult.Yes) { const dotnetcoreURL = 'https://dot.net/core-sdk-vscode'; - vscode.env.openExternal(vscode.Uri.parse(dotnetcoreURL)); + await vscode.env.openExternal(vscode.Uri.parse(dotnetcoreURL)); } else if (downloadSdk === PromptResult.No) { - vscode.commands.executeCommand('workbench.action.openGlobalSettings'); + await vscode.commands.executeCommand('workbench.action.openGlobalSettings'); } return false; @@ -40,9 +40,9 @@ export async function validateRequirements(): Promise { if (downloadMono === PromptResult.Yes) { const monoURL = 'https://www.mono-project.com/download/stable/'; - vscode.env.openExternal(vscode.Uri.parse(monoURL)); + await vscode.env.openExternal(vscode.Uri.parse(monoURL)); } else if (downloadMono === PromptResult.No) { - vscode.commands.executeCommand('workbench.action.openGlobalSettings'); + await vscode.commands.executeCommand('workbench.action.openGlobalSettings'); } return false; @@ -108,7 +108,7 @@ async function promptToDownloadDotNetSDK() { const yesItem: PromptItem = { title: 'Get the SDK', result: PromptResult.Yes }; const noItem: PromptItem = { title: 'Open settings', result: PromptResult.No, isCloseAffordance: true }; - vscode.window + void vscode.window .showErrorMessage(message, messageOptions, noItem, yesItem) .then((selection) => resolve(selection?.result ?? PromptResult.Dismissed)); }); @@ -129,7 +129,7 @@ async function promptToDownloadMono() { isCloseAffordance: true, }; - vscode.window + void vscode.window .showErrorMessage(message, messageOptions, noItem, yesItem) .then((selection) => resolve(selection?.result ?? PromptResult.Dismissed)); }); diff --git a/src/omnisharp/server.ts b/src/omnisharp/server.ts index 1e19bb9e1..95e8b57cf 100644 --- a/src/omnisharp/server.ts +++ b/src/omnisharp/server.ts @@ -127,8 +127,8 @@ export class OmniSharpServer { extensionPath ); this._omnisharpManager = new OmnisharpManager(downloader, platformInfo); - this.updateProjectDebouncer.pipe(debounceTime(1500)).subscribe((_) => { - this.updateProjectInfo(); + this.updateProjectDebouncer.pipe(debounceTime(1500)).subscribe(async (_) => { + await this.updateProjectInfo(); }); this.firstUpdateProject = true; } @@ -608,12 +608,12 @@ export class OmniSharpServer { return this._addListener(Events.ProjectConfiguration, listener); } - private debounceUpdateProjectWithLeadingTrue = () => { + private debounceUpdateProjectWithLeadingTrue = async () => { // Call the updateProjectInfo directly if it is the first time, otherwise debounce the request // This needs to be done so that we have a project information for the first incoming request if (this.firstUpdateProject) { - this.updateProjectInfo(); + await this.updateProjectInfo(); } else { this.updateProjectDebouncer.next(new ObservableEvents.ProjectModified()); } diff --git a/src/razor/razor.ts b/src/razor/razor.ts index 9aedc03f2..8223d4815 100644 --- a/src/razor/razor.ts +++ b/src/razor/razor.ts @@ -11,6 +11,7 @@ import * as Razor from '../../src/razor/src/extension'; import { EventStream } from '../eventStream'; import TelemetryReporter from '@vscode/extension-telemetry'; import { PlatformInformation } from '../shared/platform'; +import { showWarningMessage } from '../shared/observers/utils/showMessage'; export async function activateRazorExtension( context: vscode.ExtensionContext, @@ -52,7 +53,8 @@ export async function activateRazorExtension( ); } } else { - vscode.window.showWarningMessage( + showWarningMessage( + vscode, vscode.l10n.t( "Cannot load Razor language server because the directory was not found: '{0}'", languageServerDir diff --git a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts index 8c6e505b0..028ec84cf 100644 --- a/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts +++ b/src/razor/src/blazorDebug/blazorDebugConfigurationProvider.ts @@ -12,8 +12,7 @@ import { ChromeBrowserFinder, EdgeBrowserFinder } from '@vscode/js-debug-browser import { RazorLogger } from '../razorLogger'; import { JS_DEBUG_NAME, SERVER_APP_NAME } from './constants'; import { onDidTerminateDebugSession } from './terminateDebugHandler'; -import showInformationMessage from '../../../shared/observers/utils/showInformationMessage'; -import showErrorMessage from '../../../shared/observers/utils/showErrorMessage'; +import { ActionOption, showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class BlazorDebugConfigurationProvider implements vscode.DebugConfigurationProvider { private static readonly autoDetectUserNotice: string = vscode.l10n.t( @@ -168,14 +167,15 @@ export class BlazorDebugConfigurationProvider implements vscode.DebugConfigurati const message = vscode.l10n.t( 'There was an unexpected error while launching your debugging session. Check the console for helpful logs and visit the debugging docs for more info.' ); - const viewDebugDocsButton = vscode.l10n.t('View Debug Docs'); - const ignoreButton = vscode.l10n.t('Ignore'); - this.vscodeType.window.showErrorMessage(message, viewDebugDocsButton, ignoreButton).then(async (result) => { - if (result === viewDebugDocsButton) { + const viewDebugDocsButton: ActionOption = { + title: vscode.l10n.t('View Debug Docs'), + action: async () => { const debugDocsUri = 'https://aka.ms/blazorwasmcodedebug'; await this.vscodeType.commands.executeCommand(`vcode.open`, debugDocsUri); - } - }); + }, + }; + const ignoreButton = vscode.l10n.t('Ignore'); + showErrorMessage(this.vscodeType, message, viewDebugDocsButton, ignoreButton); } } diff --git a/src/razor/src/configurationChangeListener.ts b/src/razor/src/configurationChangeListener.ts index acb6cec92..aae277e6e 100644 --- a/src/razor/src/configurationChangeListener.ts +++ b/src/razor/src/configurationChangeListener.ts @@ -6,6 +6,7 @@ import * as vscode from 'vscode'; import { RazorLanguageServerClient } from './razorLanguageServerClient'; import { RazorLogger } from './razorLogger'; +import { ActionOption, showInformationMessage } from '../../shared/observers/utils/showMessage'; export function listenToConfigurationChanges(languageServerClient: RazorLanguageServerClient): vscode.Disposable { return vscode.workspace.onDidChangeConfiguration((event) => { @@ -19,15 +20,13 @@ function razorTraceConfigurationChangeHandler(languageServerClient: RazorLanguag const promptText: string = vscode.l10n.t( 'Would you like to restart the Razor Language Server to enable the Razor trace configuration change?' ); - const restartButtonText = vscode.l10n.t('Restart'); - - vscode.window.showInformationMessage(promptText, restartButtonText).then(async (result) => { - if (result !== restartButtonText) { - return; - } - - await languageServerClient.stop(); - languageServerClient.updateTraceLevel(); - await languageServerClient.start(); - }); + const restartButtonText: ActionOption = { + title: vscode.l10n.t('Restart'), + action: async () => { + await languageServerClient.stop(); + languageServerClient.updateTraceLevel(); + await languageServerClient.start(); + }, + }; + showInformationMessage(vscode, promptText, restartButtonText); } diff --git a/src/razor/src/csharp/csharpPreviewPanel.ts b/src/razor/src/csharp/csharpPreviewPanel.ts index 3c942bd1c..80b0487ee 100644 --- a/src/razor/src/csharp/csharpPreviewPanel.ts +++ b/src/razor/src/csharp/csharpPreviewPanel.ts @@ -8,6 +8,7 @@ import { IRazorDocumentChangeEvent } from '../document/IRazorDocumentChangeEvent import { RazorDocumentChangeKind } from '../document/razorDocumentChangeKind'; import { RazorDocumentManager } from '../document/razorDocumentManager'; import { getUriPath } from '../uriPaths'; +import { showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class CSharpPreviewPanel { public static readonly viewType = 'razorCSharpPreview'; @@ -61,7 +62,7 @@ export class CSharpPreviewPanel { private attachToCurrentPanel() { if (!this.panel) { - vscode.window.showErrorMessage(vscode.l10n.t('Unexpected error when attaching to C# preview window.')); + showErrorMessage(vscode, vscode.l10n.t('Unexpected error when attaching to C# preview window.')); return; } @@ -73,7 +74,7 @@ export class CSharpPreviewPanel { } await vscode.env.clipboard.writeText(this.csharpContent); - vscode.window.showInformationMessage(vscode.l10n.t('Razor C# copied to clipboard')); + showInformationMessage(vscode, vscode.l10n.t('Razor C# copied to clipboard')); return; } }); diff --git a/src/razor/src/diagnostics/reportIssuePanel.ts b/src/razor/src/diagnostics/reportIssuePanel.ts index 982e36263..83551174a 100644 --- a/src/razor/src/diagnostics/reportIssuePanel.ts +++ b/src/razor/src/diagnostics/reportIssuePanel.ts @@ -9,6 +9,7 @@ import { LogLevel } from '../logLevel'; import { ReportIssueCreator } from './reportIssueCreator'; import { ReportIssueDataCollector } from './reportIssueDataCollector'; import { ReportIssueDataCollectorFactory } from './reportIssueDataCollectorFactory'; +import { showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class ReportIssuePanel { public static readonly viewType = 'razorReportIssue'; @@ -52,9 +53,7 @@ export class ReportIssuePanel { private attachToCurrentPanel() { if (!this.panel) { - vscode.window.showErrorMessage( - vscode.l10n.t('Unexpected error when attaching to report Razor issue window.') - ); + showErrorMessage(vscode, vscode.l10n.t('Unexpected error when attaching to report Razor issue window.')); return; } @@ -63,7 +62,8 @@ export class ReportIssuePanel { case 'copyIssue': if (!this.issueContent) { if (!this.dataCollector) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t('You must first start the data collection before copying.') ); return; @@ -74,7 +74,7 @@ export class ReportIssuePanel { } await vscode.env.clipboard.writeText(this.issueContent); - vscode.window.showInformationMessage(vscode.l10n.t('Razor issue copied to clipboard')); + showInformationMessage(vscode, vscode.l10n.t('Razor issue copied to clipboard')); return; case 'startIssue': if (this.dataCollector) { @@ -83,19 +83,22 @@ export class ReportIssuePanel { } this.issueContent = undefined; this.dataCollector = this.dataCollectorFactory.create(); - vscode.window.showInformationMessage( + showInformationMessage( + vscode, vscode.l10n.t('Razor issue data collection started. Reproduce the issue then press "Stop"') ); return; case 'stopIssue': if (!this.dataCollector) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t('You must first start the data collection before stopping.') ); return; } this.dataCollector.stop(); - vscode.window.showInformationMessage( + showInformationMessage( + vscode, vscode.l10n.t('Razor issue data collection stopped. Copying issue content...') ); return; diff --git a/src/razor/src/document/razorDocumentManager.ts b/src/razor/src/document/razorDocumentManager.ts index 253034487..ab1820655 100644 --- a/src/razor/src/document/razorDocumentManager.ts +++ b/src/razor/src/document/razorDocumentManager.ts @@ -179,8 +179,8 @@ export class RazorDocumentManager implements IRazorDocumentManager { this.razorDocumentGenerationInitialized = true; const pipeName = generateUuid(); - vscode.commands.executeCommand(razorInitializeCommand, pipeName); - this.serverClient.connectNamedPipe(pipeName); + await vscode.commands.executeCommand(razorInitializeCommand, pipeName); + await this.serverClient.connectNamedPipe(pipeName); for (const document of this.documents) { await this.ensureDocumentAndProjectedDocumentsOpen(document); diff --git a/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts b/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts index b84afa81f..9a91d1375 100644 --- a/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts +++ b/src/razor/src/dynamicFile/dynamicFileInfoHandler.ts @@ -30,7 +30,7 @@ export class DynamicFileInfoHandler { vscode.commands.registerCommand( DynamicFileInfoHandler.removeDynamicFileInfoCommand, async (request: RemoveDynamicFileParams) => { - this.removeDynamicFileInfo(request); + await this.removeDynamicFileInfo(request); } ); } diff --git a/src/razor/src/html/htmlPreviewPanel.ts b/src/razor/src/html/htmlPreviewPanel.ts index 82a1778f0..8f79f6456 100644 --- a/src/razor/src/html/htmlPreviewPanel.ts +++ b/src/razor/src/html/htmlPreviewPanel.ts @@ -8,6 +8,7 @@ import { IRazorDocumentChangeEvent } from '../document/IRazorDocumentChangeEvent import { RazorDocumentChangeKind } from '../document/razorDocumentChangeKind'; import { RazorDocumentManager } from '../document/razorDocumentManager'; import { getUriPath } from '../uriPaths'; +import { showErrorMessage, showInformationMessage } from '../../../shared/observers/utils/showMessage'; export class HtmlPreviewPanel { public static readonly viewType = 'razorHtmlPreview'; @@ -61,7 +62,7 @@ export class HtmlPreviewPanel { private attachToCurrentPanel() { if (!this.panel) { - vscode.window.showErrorMessage(vscode.l10n.t('Unexpected error when attaching to HTML preview window.')); + showErrorMessage(vscode, vscode.l10n.t('Unexpected error when attaching to HTML preview window.')); return; } @@ -73,7 +74,7 @@ export class HtmlPreviewPanel { } await vscode.env.clipboard.writeText(this.htmlContent); - vscode.window.showInformationMessage(vscode.l10n.t('Razor HTML copied to clipboard')); + showInformationMessage(vscode, vscode.l10n.t('Razor HTML copied to clipboard')); return; } }); diff --git a/src/razor/src/html/htmlTagCompletionProvider.ts b/src/razor/src/html/htmlTagCompletionProvider.ts index aef25c419..6ea3f6104 100644 --- a/src/razor/src/html/htmlTagCompletionProvider.ts +++ b/src/razor/src/html/htmlTagCompletionProvider.ts @@ -166,12 +166,12 @@ export class HtmlTagCompletionProvider { const selections = activeEditor.selections; if (selections.length && selections.some((s) => s.active.isEqual(position))) { - activeEditor.insertSnippet( + await activeEditor.insertSnippet( new vscode.SnippetString(tagCompletion), selections.map((s) => s.active) ); } else { - activeEditor.insertSnippet(new vscode.SnippetString(tagCompletion), position); + await activeEditor.insertSnippet(new vscode.SnippetString(tagCompletion), position); } }, 75); } diff --git a/src/razor/src/razorLanguageServerClient.ts b/src/razor/src/razorLanguageServerClient.ts index 64ecbeb55..141052c0e 100644 --- a/src/razor/src/razorLanguageServerClient.ts +++ b/src/razor/src/razorLanguageServerClient.ts @@ -17,6 +17,7 @@ import { RazorLogger } from './razorLogger'; import { TelemetryReporter as RazorTelemetryReporter } from './telemetryReporter'; import TelemetryReporter from '@vscode/extension-telemetry'; import { randomUUID } from 'crypto'; +import { showErrorMessage } from '../../shared/observers/utils/showMessage'; const events = { ServerStop: 'ServerStop', @@ -129,7 +130,8 @@ export class RazorLanguageServerClient implements vscode.Disposable { // the language client will handle that. didChangeStateDisposable.dispose(); } catch (error) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( "Razor Language Server failed to start unexpectedly, please check the 'Razor Log' and report an issue." ) @@ -206,7 +208,8 @@ export class RazorLanguageServerClient implements vscode.Disposable { resolve(); } catch (error) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( "Razor Language Server failed to stop correctly, please check the 'Razor Log' and report an issue." ) diff --git a/src/shared/assets.ts b/src/shared/assets.ts index 41a7db31d..460a0bce9 100644 --- a/src/shared/assets.ts +++ b/src/shared/assets.ts @@ -14,6 +14,7 @@ import * as vscode from 'vscode'; import { tolerantParse } from '../json'; import { IWorkspaceDebugInformationProvider, ProjectDebugInformation } from './IWorkspaceDebugInformationProvider'; +import { showErrorMessage } from './observers/utils/showMessage'; type DebugConsoleOptions = { console: string }; @@ -572,7 +573,7 @@ export async function getBuildOperations(generator: AssetGenerator): Promise { - return new Promise((resolve, _) => { - getExistingAssets(generator).then((res) => { - if (res.length > 0) { - const yesItem = { title: vscode.l10n.t('Yes') }; - const cancelItem = { title: vscode.l10n.t('Cancel'), isCloseAffordance: true }; - vscode.window - .showWarningMessage(vscode.l10n.t('Replace existing build and debug assets?'), cancelItem, yesItem) - .then((selection) => { - if (selection === yesItem) { - resolve(true); - } else { - // The user clicked cancel - resolve(false); - } - }); - } else { - // The assets don't exist, so we're good to go. - resolve(true); - } - }); + return new Promise((resolve, reject) => { + getExistingAssets(generator).then( + (res) => { + if (res.length > 0) { + const yesItem = { title: vscode.l10n.t('Yes') }; + const cancelItem = { title: vscode.l10n.t('Cancel'), isCloseAffordance: true }; + vscode.window + .showWarningMessage( + vscode.l10n.t('Replace existing build and debug assets?'), + cancelItem, + yesItem + ) + .then((selection) => { + if (selection === yesItem) { + resolve(true); + } else { + // The user clicked cancel + resolve(false); + } + }); + } else { + // The assets don't exist, so we're good to go. + resolve(true); + } + }, + (err) => reject(err) + ); }); } @@ -925,7 +933,8 @@ export async function generateAssets( await fs.ensureDir(generator.vscodeFolder); await addAssets(generator, operations); } else { - await vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( `Could not locate .NET Core project in '{0}'. Assets were not generated.`, workspaceFolder.name @@ -934,9 +943,7 @@ export async function generateAssets( } } } catch (err) { - await vscode.window.showErrorMessage( - vscode.l10n.t('Unable to generate assets to build and debug. {0}.', `${err}`) - ); + showErrorMessage(vscode, vscode.l10n.t('Unable to generate assets to build and debug. {0}.', `${err}`)); } } diff --git a/src/shared/configurationProvider.ts b/src/shared/configurationProvider.ts index 9ff342ac4..a58117ab7 100644 --- a/src/shared/configurationProvider.ts +++ b/src/shared/configurationProvider.ts @@ -7,7 +7,6 @@ import * as vscode from 'vscode'; import { ParsedEnvironmentFile } from '../coreclrDebug/parsedEnvironmentFile'; import { debugSessionTracker } from '../coreclrDebug/provisionalDebugSessionTracker'; -import { MessageItem } from '../vscodeAdapter'; import { CertToolStatusCodes, createSelfSignedCert, hasDotnetDevCertsHttps } from '../utils/dotnetDevCertsHttps'; import { AttachItem, @@ -18,6 +17,12 @@ import { import { PlatformInformation } from './platform'; import { getCSharpDevKit } from '../utils/getCSharpDevKit'; import { commonOptions } from './options'; +import { + ActionOption, + showErrorMessageWithOptions, + showInformationMessage, + showWarningMessage, +} from './observers/utils/showMessage'; /** * Class used for debug configurations that will be sent to the debugger registered by {@link DebugAdapterExecutableFactory} @@ -121,7 +126,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration } } } else { - vscode.window.showErrorMessage(vscode.l10n.t('No process was selected.'), { modal: true }); + showErrorMessageWithOptions(vscode, vscode.l10n.t('No process was selected.'), { modal: true }); return undefined; } } @@ -145,7 +150,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration } if (debugConfiguration.checkForDevCert) { - this.checkForDevCerts(commonOptions.dotnetPath); + await this.checkForDevCerts(commonOptions.dotnetPath); } } @@ -163,7 +168,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration // show error message if single lines cannot get parsed if (parsedFile.Warning) { - this.showFileWarningAsync(parsedFile.Warning, envFile); + this.showFileWarning(parsedFile.Warning, envFile); } config.env = parsedFile.Env; @@ -177,13 +182,15 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration return config; } - private async showFileWarningAsync(message: string, fileName: string) { - const openItem: MessageItem = { title: vscode.l10n.t('Open envFile') }; - const result = await vscode.window.showWarningMessage(message, openItem); - if (result?.title === openItem.title) { - const doc = await vscode.workspace.openTextDocument(fileName); - await vscode.window.showTextDocument(doc); - } + private showFileWarning(message: string, fileName: string) { + const openItem: ActionOption = { + title: vscode.l10n.t('Open envFile'), + action: async () => { + const doc = await vscode.workspace.openTextDocument(fileName); + await vscode.window.showTextDocument(doc); + }, + }; + showWarningMessage(vscode, message, openItem); } private loadSettingDebugOptions(debugConfiguration: vscode.DebugConfiguration): void { @@ -226,58 +233,69 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration } } - private checkForDevCerts(dotnetPath: string) { - hasDotnetDevCertsHttps(dotnetPath).then(async (returnData) => { + private async checkForDevCerts(dotnetPath: string) { + await hasDotnetDevCertsHttps(dotnetPath).then(async (returnData) => { const errorCode = returnData.error?.code; if ( errorCode === CertToolStatusCodes.CertificateNotTrusted || errorCode === CertToolStatusCodes.ErrorNoValidCertificateFound ) { - const labelYes = vscode.l10n.t('Yes'); + const labelYes: ActionOption = { + title: vscode.l10n.t('Yes'), + action: async () => { + const returnData = await createSelfSignedCert(dotnetPath); + if (returnData.error === null) { + //if the prcess returns 0, returnData.error is null, otherwise the return code can be acessed in returnData.error.code + const message = + errorCode === CertToolStatusCodes.CertificateNotTrusted ? 'trusted' : 'created'; + showInformationMessage( + vscode, + vscode.l10n.t('Self-signed certificate sucessfully {0}', message) + ); + } else { + this.csharpOutputChannel.appendLine( + vscode.l10n.t( + `Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}`, + returnData.error.message, + `${returnData.error.code}`, + returnData.stdout + ) + ); + + const labelShowOutput: ActionOption = { + title: vscode.l10n.t('Show Output'), + action: async () => { + this.csharpOutputChannel.show(); + }, + }; + showWarningMessage( + vscode, + vscode.l10n.t( + "Couldn't create self-signed certificate. See output for more information." + ), + labelShowOutput + ); + } + }, + }; const labelNotNow = vscode.l10n.t('Not Now'); - const labelMoreInfo = vscode.l10n.t('More Information'); - - const result = await vscode.window.showInformationMessage( + const labelMoreInfo: ActionOption = { + title: vscode.l10n.t('More Information'), + action: async () => { + const launchjsonDescriptionURL = 'https://aka.ms/VSCode-CS-CheckForDevCert'; + await vscode.env.openExternal(vscode.Uri.parse(launchjsonDescriptionURL)); + await this.checkForDevCerts(dotnetPath); + }, + }; + showInformationMessage( + vscode, vscode.l10n.t( 'The selected launch configuration is configured to launch a web browser but no trusted development certificate was found. Create a trusted self-signed certificate?' ), - { title: labelYes }, - { title: labelNotNow, isCloseAffordance: true }, - { title: labelMoreInfo } + labelYes, + labelNotNow, + labelMoreInfo ); - if (result?.title === labelYes) { - const returnData = await createSelfSignedCert(dotnetPath); - if (returnData.error === null) { - //if the prcess returns 0, returnData.error is null, otherwise the return code can be acessed in returnData.error.code - const message = errorCode === CertToolStatusCodes.CertificateNotTrusted ? 'trusted' : 'created'; - vscode.window.showInformationMessage( - vscode.l10n.t('Self-signed certificate sucessfully {0}', message) - ); - } else { - this.csharpOutputChannel.appendLine( - vscode.l10n.t( - `Couldn't create self-signed certificate. {0}\ncode: {1}\nstdout: {2}`, - returnData.error.message, - `${returnData.error.code}`, - returnData.stdout - ) - ); - - const labelShowOutput = vscode.l10n.t('Show Output'); - const result = await vscode.window.showWarningMessage( - vscode.l10n.t("Couldn't create self-signed certificate. See output for more information."), - labelShowOutput - ); - if (result === labelShowOutput) { - this.csharpOutputChannel.show(); - } - } - } - if (result?.title === labelMoreInfo) { - const launchjsonDescriptionURL = 'https://aka.ms/VSCode-CS-CheckForDevCert'; - vscode.env.openExternal(vscode.Uri.parse(launchjsonDescriptionURL)); - this.checkForDevCerts(dotnetPath); - } } }); } diff --git a/src/shared/dotnetConfigurationProvider.ts b/src/shared/dotnetConfigurationProvider.ts index b62fa29c9..d07e5449a 100644 --- a/src/shared/dotnetConfigurationProvider.ts +++ b/src/shared/dotnetConfigurationProvider.ts @@ -171,10 +171,10 @@ export class DotnetConfigurationResolver implements vscode.DebugConfigurationPro } else if (debugConfigArray.length === 2) { // This creates a onDidStartDebugSession event listener that will dispose of itself when it detects // the debugConfiguration that is return from this method has started. - const startDebugEvent = vscode.debug.onDidStartDebugSession((debugSession: vscode.DebugSession) => { + const startDebugEvent = vscode.debug.onDidStartDebugSession(async (debugSession: vscode.DebugSession) => { if (debugSession.name === debugConfigArray[0].name) { startDebugEvent.dispose(); - vscode.debug.startDebugging(debugSession.workspaceFolder, debugConfigArray[1], debugSession); + await vscode.debug.startDebugging(debugSession.workspaceFolder, debugConfigArray[1], debugSession); } }); diff --git a/src/shared/observers/utils/messageItemWithCommand.ts b/src/shared/observers/utils/messageItemWithCommand.ts deleted file mode 100644 index f6d9df502..000000000 --- a/src/shared/observers/utils/messageItemWithCommand.ts +++ /dev/null @@ -1,10 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { MessageItem } from '../../../vscodeAdapter'; - -export default interface MessageItemWithCommand extends MessageItem { - command: string; -} diff --git a/src/shared/observers/utils/showErrorMessage.ts b/src/shared/observers/utils/showErrorMessage.ts deleted file mode 100644 index bf0ab6759..000000000 --- a/src/shared/observers/utils/showErrorMessage.ts +++ /dev/null @@ -1,14 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { vscode } from '../../../vscodeAdapter'; - -export default async function showErrorMessage(vscode: vscode, message: string, ...items: string[]) { - try { - await vscode.window.showErrorMessage(message, ...items); - } catch (err) { - console.log(err); - } -} diff --git a/src/shared/observers/utils/showInformationMessage.ts b/src/shared/observers/utils/showInformationMessage.ts deleted file mode 100644 index 4d927f770..000000000 --- a/src/shared/observers/utils/showInformationMessage.ts +++ /dev/null @@ -1,22 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { vscode } from '../../../vscodeAdapter'; -import MessageItemWithCommand from './messageItemWithCommand'; - -export default async function showInformationMessage( - vscode: vscode, - message: string, - ...items: MessageItemWithCommand[] -) { - try { - const value = await vscode.window.showInformationMessage(message, ...items); - if (value?.command) { - vscode.commands.executeCommand(value.command); - } - } catch (err) { - console.log(err); - } -} diff --git a/src/shared/observers/utils/showMessage.ts b/src/shared/observers/utils/showMessage.ts new file mode 100644 index 000000000..00f049027 --- /dev/null +++ b/src/shared/observers/utils/showMessage.ts @@ -0,0 +1,108 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { MessageOptions, vscode } from '../../../vscodeAdapter'; + +/** + * Show an error message toast. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showErrorMessage( + vscode: vscode, + message: string, + ...items: (CommandOption | ActionOption | string)[] +): void { + showErrorMessageWithOptions(vscode, message, undefined, ...items); +} + +/** + * Show an error message with specific options. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showErrorMessageWithOptions( + vscode: vscode, + message: string, + options: MessageOptions | undefined, + ...items: (CommandOption | ActionOption | string)[] +): void { + showMessage(vscode, vscode.window.showErrorMessage, message, options, ...items); +} + +/** + * Show a warning message toast. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showWarningMessage( + vscode: vscode, + message: string, + ...items: (CommandOption | ActionOption | string)[] +) { + showMessage(vscode, vscode.window.showWarningMessage, message, undefined, ...items); +} + +/** + * Show an information message toast. + * This function returns immediately and does not wait for the user to select an option or dismiss the message. + */ +export function showInformationMessage( + vscode: vscode, + message: string, + ...items: (CommandOption | ActionOption | string)[] +) { + showMessage(vscode, vscode.window.showInformationMessage, message, undefined, ...items); +} + +/** + * A message option that will trigger a command when selected. + */ +export type CommandOption = { title: string; command: string; arguments?: any[] }; + +/** + * A message option that will trigger an action when selected. + */ +export type ActionOption = { title: string; action: () => Promise }; + +type showMessageFunc = ( + message: string, + options: MessageOptions, + ...items: (CommandOption | ActionOption | string)[] +) => Thenable<(CommandOption | ActionOption | string) | undefined>; + +function showMessage( + vscode: vscode, + delegateFunc: showMessageFunc, + message: string, + options: MessageOptions | undefined, + ...items: (CommandOption | ActionOption | string)[] +) { + const messageOptions = options === undefined ? {} : options; + delegateFunc(message, messageOptions, ...items).then( + async (selectedItem) => { + if (selectedItem) { + const item = items.find((i) => i); + if (item === undefined) { + // This should never happen - we got an item back that we didn't provide + throw new Error( + `Could not find item with message: ${selectedItem}; items:${JSON.stringify(items)}` + ); + } + if (typeof item === 'string') { + return; + } else if ('action' in item && item.action) { + await item.action(); + } else if ('command' in item && item.command) { + if (item.arguments) { + await vscode.commands.executeCommand(item.command, ...item.arguments); + } else { + await vscode.commands.executeCommand(item.command); + } + } + } + }, + (rejected) => { + console.log(rejected); + } + ); +} diff --git a/src/shared/observers/utils/showWarningMessage.ts b/src/shared/observers/utils/showWarningMessage.ts deleted file mode 100644 index 2d54a16c1..000000000 --- a/src/shared/observers/utils/showWarningMessage.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { vscode } from '../../../vscodeAdapter'; -import MessageItemWithCommand from './messageItemWithCommand'; - -export default async function showWarningMessage(vscode: vscode, message: string, ...items: MessageItemWithCommand[]) { - try { - const value = await vscode.window.showWarningMessage(message, ...items); - if (value?.command) { - await vscode.commands.executeCommand(value.command); - } - } catch (err) { - console.log(err); - } -} diff --git a/src/shared/processPicker.ts b/src/shared/processPicker.ts index f049b7aa6..78ff23dd6 100644 --- a/src/shared/processPicker.ts +++ b/src/shared/processPicker.ts @@ -650,35 +650,38 @@ async function execChildProcessAndOutputErrorToChannel( channel.appendLine(`Executing: ${process}`); return new Promise((resolve, reject) => { - GetSysNativePathIfNeeded(platformInfo).then((newEnv) => { - child_process.exec( - process, - { cwd: workingDirectory, env: newEnv, maxBuffer: 500 * 1024 }, - (error, stdout, stderr) => { - let channelOutput = ''; - - if (stdout && stdout.length > 0) { - channelOutput = channelOutput.concat(stdout); + GetSysNativePathIfNeeded(platformInfo).then( + (newEnv) => { + child_process.exec( + process, + { cwd: workingDirectory, env: newEnv, maxBuffer: 500 * 1024 }, + (error, stdout, stderr) => { + let channelOutput = ''; + + if (stdout && stdout.length > 0) { + channelOutput = channelOutput.concat(stdout); + } + + if (stderr && stderr.length > 0) { + channelOutput = channelOutput.concat('stderr: ' + stderr); + } + + if (error) { + channelOutput = channelOutput.concat(vscode.l10n.t('Error Message: ') + error.message); + } + + if (error || (stderr && stderr.length > 0)) { + channel.append(channelOutput); + channel.show(); + reject(new Error(vscode.l10n.t('See {0} output', 'remote-attach'))); + return; + } + + resolve(stdout); } - - if (stderr && stderr.length > 0) { - channelOutput = channelOutput.concat('stderr: ' + stderr); - } - - if (error) { - channelOutput = channelOutput.concat(vscode.l10n.t('Error Message: ') + error.message); - } - - if (error || (stderr && stderr.length > 0)) { - channel.append(channelOutput); - channel.show(); - reject(new Error(vscode.l10n.t('See {0} output', 'remote-attach'))); - return; - } - - resolve(stdout); - } - ); - }); + ); + }, + (innerRejects) => reject(innerRejects) + ); }); } diff --git a/src/shared/workspaceConfigurationProvider.ts b/src/shared/workspaceConfigurationProvider.ts index f13ebbddb..1d2d7c537 100644 --- a/src/shared/workspaceConfigurationProvider.ts +++ b/src/shared/workspaceConfigurationProvider.ts @@ -18,6 +18,7 @@ import { parse } from 'jsonc-parser'; import { IWorkspaceDebugInformationProvider } from './IWorkspaceDebugInformationProvider'; import { PlatformInformation } from './platform'; import { BaseVsDbgConfigurationProvider } from './configurationProvider'; +import { showErrorMessage } from './observers/utils/showMessage'; /** * This class will be used for providing debug configurations given workspace information. @@ -39,7 +40,8 @@ export class DotnetWorkspaceConfigurationProvider extends BaseVsDbgConfiguration _?: vscode.CancellationToken ): Promise { if (!folder || !folder.uri) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t('Cannot create .NET debug configurations. No workspace folder was selected.') ); return []; @@ -48,7 +50,8 @@ export class DotnetWorkspaceConfigurationProvider extends BaseVsDbgConfiguration try { const info = await this.workspaceDebugInfoProvider.getWorkspaceDebugInformation(folder.uri); if (!info) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( 'Cannot create .NET debug configurations. The server is still initializing or has exited unexpectedly.' ) @@ -57,7 +60,8 @@ export class DotnetWorkspaceConfigurationProvider extends BaseVsDbgConfiguration } if (info.length === 0) { - vscode.window.showErrorMessage( + showErrorMessage( + vscode, vscode.l10n.t( "Cannot create .NET debug configurations. The active C# project is not within folder '{0}'.", folder.uri.fsPath diff --git a/src/vscodeAdapter.ts b/src/vscodeAdapter.ts index 581161f9a..8768f219a 100644 --- a/src/vscodeAdapter.ts +++ b/src/vscodeAdapter.ts @@ -965,9 +965,24 @@ export interface vscode { }; window: { activeTextEditor: TextEditor | undefined; - showInformationMessage: (message: string, ...items: T[]) => Thenable; - showWarningMessage: (message: string, ...items: T[]) => Thenable; - showErrorMessage(message: string, ...items: string[]): Thenable; + showInformationMessage(message: string, ...items: T[]): Thenable; + showInformationMessage( + message: string, + options: MessageOptions, + ...items: T[] + ): Thenable; + showWarningMessage(message: string, ...items: T[]): Thenable; + showWarningMessage( + message: string, + options: MessageOptions, + ...items: T[] + ): Thenable; + showErrorMessage(message: string, ...items: T[]): Thenable; + showErrorMessage( + message: string, + options: MessageOptions, + ...items: T[] + ): Thenable; }; workspace: { getConfiguration: (section?: string, resource?: Uri) => WorkspaceConfiguration; diff --git a/tasks/offlinePackagingTasks.ts b/tasks/offlinePackagingTasks.ts index f631a3e2f..1c492e2ff 100644 --- a/tasks/offlinePackagingTasks.ts +++ b/tasks/offlinePackagingTasks.ts @@ -149,7 +149,7 @@ gulp.task('installDependencies', async () => { )!; try { - acquireAndInstallAllNugetPackages(vsixPlatformInfo, packageJSON, true); + await acquireAndInstallAllNugetPackages(vsixPlatformInfo, packageJSON, true); } catch (err) { const message = (err instanceof Error ? err.stack : err) ?? ''; // NOTE: Extra `\n---` at the end is because gulp will print this message following by the diff --git a/tasks/testTasks.ts b/tasks/testTasks.ts index f8d705d48..0feded67c 100644 --- a/tasks/testTasks.ts +++ b/tasks/testTasks.ts @@ -20,7 +20,7 @@ createIntegrationTestSubTasks(); createOmniSharpTestSubTasks(); gulp.task('test:artifacts', async () => { - runJestTest(jestArtifactTestsProjectName); + await runJestTest(jestArtifactTestsProjectName); }); // Overall test command that runs everything except O# tests. @@ -43,13 +43,13 @@ function createUnitTestSubTasks() { }); gulp.task('test:unit:razor', async () => { - runJestTest(razorTestProjectName); + await runJestTest(razorTestProjectName); }); gulp.task('test:unit', gulp.series('test:unit:csharp', 'test:unit:razor')); } -async function createIntegrationTestSubTasks() { +function createIntegrationTestSubTasks() { const integrationTestProjects = ['slnWithCsproj']; for (const projectName of integrationTestProjects) { gulp.task(`test:integration:csharp:${projectName}`, async () => diff --git a/test/fakes.ts b/test/fakes.ts index 533a65bcc..a8ebf9225 100644 --- a/test/fakes.ts +++ b/test/fakes.ts @@ -156,7 +156,7 @@ export function getFakeVsCode(): vscode.vscode { showWarningMessage: (_message: string, ..._items: T[]) => { throw new Error('Not Implemented'); }, - showErrorMessage: (_message: string, ..._items: string[]) => { + showErrorMessage: (_message: string, ..._items: T[]) => { throw new Error('Not Implemented'); }, }, @@ -293,8 +293,13 @@ export function getVSCodeWithConfig(vscodeAdapter: vscode.vscode = getFakeVsCode return vscodeAdapter; } -export function updateConfig(vscodeAdapter: vscode.vscode, section: string | undefined, config: string, value: any) { - const workspaceConfig = vscodeAdapter.workspace.getConfiguration(section); +export async function updateConfig( + vscode: vscode.vscode, + section: string | undefined, + config: string, + value: any +): Promise { + const workspaceConfig = vscode.workspace.getConfiguration(section); const configEntry = section ? `${section}.${config}` : config; - workspaceConfig.update(configEntry, value); + await workspaceConfig.update(configEntry, value); } diff --git a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts index 0c82b08ca..a9ec6091c 100644 --- a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts @@ -61,7 +61,7 @@ describe(`Code Actions Tests`, () => { await vscode.workspace.applyEdit(actions[0].edit!); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'namespace CodeActionsTests;', '', 'class CodeActions', @@ -84,7 +84,7 @@ describe(`Code Actions Tests`, () => { await vscode.workspace.applyEdit(actions[0].edit!); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -112,7 +112,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Document*/ 0); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -141,7 +141,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Project*/ 1); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -160,7 +160,7 @@ describe(`Code Actions Tests`, () => { const projectFile = vscode.workspace.textDocuments.find((d) => d.fileName.endsWith('CodeActionsInProject.cs')); expect(projectFile).toBeDefined(); - expectText(projectFile!, [ + await expectText(projectFile!, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -182,7 +182,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Solution*/ 2); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -203,7 +203,7 @@ describe(`Code Actions Tests`, () => { d.fileName.endsWith('CodeActionsInProject.cs') ); expect(currentProjectFile).toBeDefined(); - expectText(currentProjectFile!, [ + await expectText(currentProjectFile!, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -217,7 +217,7 @@ describe(`Code Actions Tests`, () => { d.fileName.endsWith('CodeActionsInSolution.cs') ); expect(otherProjectFile).toBeDefined(); - expectText(otherProjectFile!, [ + await expectText(otherProjectFile!, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -236,7 +236,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Convert to binary*/ 0); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', @@ -261,7 +261,7 @@ describe(`Code Actions Tests`, () => { await invokeQuickPickAction(action, /*quickPickIndex: Suppress CS0219 -> in Source*/ 0); - expectText(vscode.window.activeTextEditor!.document, [ + await expectText(vscode.window.activeTextEditor!.document, [ 'using System;', '', 'namespace CodeActionsTests;', diff --git a/test/lsptoolshost/integrationTests/formatting.integration.test.ts b/test/lsptoolshost/integrationTests/formatting.integration.test.ts index 7e7f228ad..9a8c0e989 100644 --- a/test/lsptoolshost/integrationTests/formatting.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formatting.integration.test.ts @@ -50,7 +50,7 @@ describe(`Formatting Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document range formatting formats only the range', async () => { @@ -70,7 +70,7 @@ describe(`Formatting Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document on type formatting formats the typed location', async () => { @@ -89,6 +89,6 @@ describe(`Formatting Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); }); diff --git a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts index 70945a9e6..839192316 100644 --- a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts @@ -50,7 +50,7 @@ describe(`Formatting With EditorConfig Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document range formatting respects editorconfig', async () => { @@ -72,7 +72,7 @@ describe(`Formatting With EditorConfig Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); test('Document on type formatting respects editorconfig', async () => { @@ -95,6 +95,6 @@ describe(`Formatting With EditorConfig Tests`, () => { ' }', '}', ]; - expectText(vscode.window.activeTextEditor!.document, expectedText); + await expectText(vscode.window.activeTextEditor!.document, expectedText); }); }); diff --git a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts index 50d41afb6..ce7ccf03b 100644 --- a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts +++ b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts @@ -22,7 +22,7 @@ describeIfCSharp(`Unit Testing Tests`, () => { }); beforeEach(async () => { - vscode.workspace + await vscode.workspace .getConfiguration() .update('dotnet.unitTests.runSettingsPath', undefined, vscode.ConfigurationTarget.Workspace); const fileName = path.join('test', 'UnitTest1.cs'); diff --git a/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts index 31eec3a06..e3b88e425 100644 --- a/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts +++ b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts @@ -39,10 +39,10 @@ describe('Option changes observer', () => { { config: 'dotnet', section: 'preferCSharpExtension', value: true }, ].forEach((elem) => { describe(`When the ${elem.config}.${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -70,10 +70,10 @@ describe('Option changes observer', () => { [{ config: 'dotnet', section: 'server.useOmnisharp', value: true }].forEach((elem) => { describe(`When the ${elem.config}.${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -103,10 +103,10 @@ describe('Option changes observer', () => { { config: 'dotnet', section: 'server.documentSelector', value: ['csharp'] }, { config: 'dotnet', section: 'server.trace', value: 'Information' }, ].forEach((elem) => { - test(`Information Message is not shown if no change in value for ${elem.config}.${elem.section}`, () => { + test(`Information Message is not shown if no change in value for ${elem.config}.${elem.section}`, async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); expect(infoMessage).toBe(undefined); }); @@ -118,10 +118,10 @@ describe('Option changes observer', () => { { config: 'files', section: 'exclude', value: false }, { config: 'search', section: 'exclude', value: 1000 }, ].forEach((elem) => { - test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, () => { + test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); expect(infoMessage).toBe(undefined); }); diff --git a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 7742e1ce2..8a95746ed 100644 --- a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -18,13 +18,13 @@ export interface ActivationResult { export async function activateCSharpExtension(): Promise { const configuration = vscode.workspace.getConfiguration(); - configuration.update( + await configuration.update( 'omnisharp.enableLspDriver', process.env.OMNISHARP_DRIVER === 'lsp' ? true : false, vscode.ConfigurationTarget.WorkspaceFolder ); if (process.env.OMNISHARP_LOCATION) { - configuration.update('path', process.env.OMNISHARP_LOCATION, vscode.ConfigurationTarget.WorkspaceFolder); + await configuration.update('path', process.env.OMNISHARP_LOCATION, vscode.ConfigurationTarget.WorkspaceFolder); } const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); @@ -67,8 +67,8 @@ export async function restartOmniSharpServer(): Promise { resolve(); } }); - vscode.commands.executeCommand('o.restart'); }); + await vscode.commands.executeCommand('o.restart'); console.log('OmniSharp restarted'); } catch (err) { console.log(JSON.stringify(err)); diff --git a/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts b/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts index 5913781c9..6d3afacf7 100644 --- a/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/launchConfiguration.integration.test.ts @@ -23,7 +23,7 @@ describe.skip(`Tasks generation: ${testAssetWorkspace.description}`, function () }); test('Starting .NET Core Launch (console) from the workspace root should create an Active Debug Session', async () => { - vscode.commands.executeCommand('dotnet.generateAssets', 0); + await vscode.commands.executeCommand('dotnet.generateAssets', 0); await poll(async () => fs.exists(testAssetWorkspace.launchJsonPath), 10000, 100); const onChangeSubscription = vscode.debug.onDidChangeActiveDebugSession((_) => { diff --git a/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts index 3659812a8..c19a88d2e 100644 --- a/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts @@ -63,8 +63,8 @@ describe('InformationMessageObserver', () => { ].forEach((elem) => { describe(elem.event.constructor.name, () => { describe('Suppress Dotnet Restore Notification is true', () => { - beforeEach(() => { - vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', true); + beforeEach(async () => { + await vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', true); optionObservable.next(); }); @@ -75,8 +75,8 @@ describe('InformationMessageObserver', () => { }); describe('Suppress Dotnet Restore Notification is false', () => { - beforeEach(() => { - vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', false); + beforeEach(async () => { + await vscode.workspace.getConfiguration().update('csharp.suppressDotnetRestoreNotification', false); optionObservable.next(); }); diff --git a/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts index df72f9f02..a9348339e 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/errorMessageObserver.test.ts @@ -4,8 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { describe, test, expect, beforeEach } from '@jest/globals'; -import { vscode } from '../../../../src/vscodeAdapter'; - +import { MessageItem, vscode } from '../../../../src/vscodeAdapter'; import { ErrorMessageObserver } from '../../../../src/omnisharp/observers/errorMessageObserver'; import { ZipError, EventWithMessage, IntegrityCheckFailure } from '../../../../src/shared/loggingEvents'; import { getFakeVsCode } from '../../../fakes'; @@ -16,7 +15,7 @@ describe('ErrorMessageObserver', () => { let errorMessage: string | undefined; const observer = new ErrorMessageObserver(vscode); - vscode.window.showErrorMessage = async (message: string, ..._: string[]) => { + vscode.window.showErrorMessage = async (message: string, ..._items: T[]) => { errorMessage = message; return Promise.resolve('Done'); }; diff --git a/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts index 29bc6ced0..4a838a1e3 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/omnisharpChannelObserver.test.ts @@ -23,7 +23,7 @@ describe('OmnisharpChannelObserver', () => { const optionObservable = new Subject(); let observer: OmnisharpChannelObserver; - beforeEach(() => { + beforeEach(async () => { hasShown = false; hasCleared = false; preserveFocus = false; @@ -40,7 +40,7 @@ describe('OmnisharpChannelObserver', () => { jest.spyOn(vscode.workspace, 'getConfiguration').mockReturnValue(getWorkspaceConfiguration()); - vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', true); + await vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', true); optionObservable.next(); }); @@ -57,8 +57,8 @@ describe('OmnisharpChannelObserver', () => { }); }); - test(`OmnisharpServerOnStdErr: Channel is not shown when disabled in configuration`, () => { - vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', false); + test(`OmnisharpServerOnStdErr: Channel is not shown when disabled in configuration`, async () => { + await vscode.workspace.getConfiguration().update('csharp.showOmnisharpLogOnError', false); optionObservable.next(); expect(hasShown).toEqual(false); diff --git a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts index 08cf21513..0110c87f9 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts @@ -67,20 +67,20 @@ describe('TelemetryReporterObserver', () => { errorProp = []; }); - test('PackageInstallation: AcquisitionStart is reported', () => { + test('PackageInstallation: AcquisitionStart is reported', async () => { const event = new PackageInstallation('somePackage'); - observer.post(event); + await observer.post(event); expect(name.length).toBeGreaterThan(0); }); - test('InstallationSuccess: Telemetry props contain installation stage', () => { + test('InstallationSuccess: Telemetry props contain installation stage', async () => { const event = new InstallationSuccess(); - observer.post(event); + await observer.post(event); expect(name).toEqual('AcquisitionSucceeded'); expect(property).toHaveProperty('installStage', 'completeSuccess'); }); - test(`${ProjectConfiguration.name}: Telemetry props contains project id and target framework`, () => { + test(`${ProjectConfiguration.name}: Telemetry props contains project id and target framework`, async () => { const targetFrameworks = ['tfm1', 'tfm2']; const projectId = 'sample'; const sessionId = 'session01'; @@ -102,7 +102,7 @@ describe('TelemetryReporterObserver', () => { SdkStyleProject: sdkStyleProject, }); - observer.post(event); + await observer.post(event); isNotNull(property); expect(property['ProjectCapabilities']).toEqual('cap1 cap2'); expect(property['TargetFrameworks']).toEqual('tfm1|tfm2'); @@ -120,24 +120,24 @@ describe('TelemetryReporterObserver', () => { new OmnisharpDelayTrackerEventMeasures('someEvent', { someKey: 1 }), new OmnisharpStart('startEvent', { someOtherKey: 2 }), ].forEach((event: TelemetryEventWithMeasures) => { - test(`${event.constructor.name}: SendTelemetry event is called with the name and measures`, () => { - observer.post(event); + test(`${event.constructor.name}: SendTelemetry event is called with the name and measures`, async () => { + await observer.post(event); expect(name).toContain(event.eventName); expect(measure).toMatchObject([event.measures]); }); }); - test(`${TelemetryEvent.name}: SendTelemetry event is called with the name, properties and measures`, () => { + test(`${TelemetryEvent.name}: SendTelemetry event is called with the name, properties and measures`, async () => { const event = new TelemetryEvent('someName', { key: 'value' }, { someKey: 1 }); - observer.post(event); + await observer.post(event); expect(name).toContain(event.eventName); expect(measure).toMatchObject([event.measures!]); expect(property).toEqual(event.properties); }); - test(`${TelemetryErrorEvent.name}: SendTelemetry error event is called with the name, properties, measures, and errorProps`, () => { + test(`${TelemetryErrorEvent.name}: SendTelemetry error event is called with the name, properties, measures, and errorProps`, async () => { const event = new TelemetryErrorEvent('someName', { key: 'value' }, { someKey: 1 }, ['StackTrace']); - observer.post(event); + await observer.post(event); expect(name).toContain(event.eventName); expect(measure).toMatchObject([event.measures!]); expect(property).toEqual(event.properties); @@ -145,19 +145,19 @@ describe('TelemetryReporterObserver', () => { }); describe('InstallationFailure', () => { - test('Telemetry Props contains platform information, install stage and an event name', () => { + test('Telemetry Props contains platform information, install stage and an event name', async () => { const event = new InstallationFailure('someStage', 'someError'); - observer.post(event); + await observer.post(event); expect(name).toEqual('AcquisitionFailed'); expect(property!['platform.architecture']).toEqual(platformInfo.architecture); expect(property!['platform.platform']).toEqual(platformInfo.platform); expect(property!['installStage']).toBeDefined(); }); - test(`Telemetry Props contains message and packageUrl if error is package error`, () => { + test(`Telemetry Props contains message and packageUrl if error is package error`, async () => { const error = new PackageError('someError', { description: 'foo', url: 'someurl' }, undefined); const event = new InstallationFailure('someStage', error); - observer.post(event); + await observer.post(event); expect(name).toEqual('AcquisitionFailed'); expect(property!['error.message']).toEqual(error.message); expect(property!['error.packageUrl']).toEqual(error.pkg.url); @@ -165,33 +165,33 @@ describe('TelemetryReporterObserver', () => { }); describe('TestExecutionCountReport', () => { - test('SendTelemetryEvent is called for "RunTest" and "DebugTest"', () => { + test('SendTelemetryEvent is called for "RunTest" and "DebugTest"', async () => { const event = new TestExecutionCountReport({ framework1: 20 }, { framework2: 30 }); - observer.post(event); + await observer.post(event); expect(name).toContain('RunTest'); expect(name).toContain('DebugTest'); expect(measure).toMatchObject([event.debugCounts!, event.runCounts!]); }); - test('SendTelemetryEvent is not called for empty run count', () => { + test('SendTelemetryEvent is not called for empty run count', async () => { const event = new TestExecutionCountReport({ framework1: 20 }, undefined!); - observer.post(event); + await observer.post(event); expect(name).not.toContain('RunTest'); expect(name).toContain('DebugTest'); expect(measure).toMatchObject([event.debugCounts!]); }); - test('SendTelemetryEvent is not called for empty debug count', () => { + test('SendTelemetryEvent is not called for empty debug count', async () => { const event = new TestExecutionCountReport(undefined!, { framework1: 20 }); - observer.post(event); + await observer.post(event); expect(name).toContain('RunTest'); expect(name).not.toContain('DebugTest'); expect(measure).toMatchObject([event.runCounts!]); }); - test('SendTelemetryEvent is not called for empty debug and run counts', () => { + test('SendTelemetryEvent is not called for empty debug and run counts', async () => { const event = new TestExecutionCountReport(undefined!, undefined!); - observer.post(event); + await observer.post(event); expect(name).toBeFalsy(); expect(measure).toHaveLength(0); }); diff --git a/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts index af8b9c7c9..3f6b21c32 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharp/omniSharpMonoResolver.test.ts @@ -24,10 +24,10 @@ describe(`${OmniSharpMonoResolver.name}`, () => { return Promise.resolve(version); }; - beforeEach(() => { + beforeEach(async () => { getMonoCalled = false; jest.spyOn(vscode.workspace, 'getConfiguration').mockReturnValue(getWorkspaceConfiguration()); - vscode.workspace.getConfiguration().update('omnisharp.monoPath', monoPath); + await vscode.workspace.getConfiguration().update('omnisharp.monoPath', monoPath); }); test(`it returns the path and version if the version is greater than or equal to ${requiredMonoVersion}`, async () => { diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts index f4edaf802..c829900ba 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts @@ -119,13 +119,13 @@ describe(OmnisharpManager.name, () => { }); test('Throws error if the path is neither an absolute path nor a valid semver, nor the string "latest"', async () => { - expect( + await expect( manager.GetOmniSharpLaunchPath(defaultVersion, 'Some incorrect path', useFramework, extensionPath) ).rejects.toThrowError(Error); }); test('Throws error when the specified path is an invalid semver', async () => { - expect( + await expect( manager.GetOmniSharpLaunchPath(defaultVersion, 'a.b.c', useFramework, extensionPath) ).rejects.toThrowError(Error); }); diff --git a/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts index de1b4c1b7..32f7d3b05 100644 --- a/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts @@ -41,10 +41,10 @@ describe('OmniSharpConfigChangeObserver', () => { { config: 'omnisharp', section: 'loggingLevel', value: 'verbose' }, ].forEach((elem) => { describe(`When the ${elem.config} ${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -72,10 +72,10 @@ describe('OmniSharpConfigChangeObserver', () => { [{ config: 'dotnet', section: 'server.useOmnisharp', value: true }].forEach((elem) => { describe(`When the ${elem.config} ${elem.section} changes`, () => { - beforeEach(() => { + beforeEach(async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); }); @@ -111,10 +111,10 @@ describe('OmniSharpConfigChangeObserver', () => { { config: 'omnisharp', section: 'projectLoadTimeout', value: 1000 }, { config: 'omnisharp', section: 'autoStart', value: false }, ].forEach((elem) => { - test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, () => { + test(`Information Message is not shown on change in ${elem.config}.${elem.section}`, async () => { expect(infoMessage).toBe(undefined); expect(invokedCommand).toBe(undefined); - updateConfig(vscode, elem.config, elem.section, elem.value); + await updateConfig(vscode, elem.config, elem.section, elem.value); optionObservable.next(); expect(infoMessage).toBe(undefined); }); diff --git a/test/omnisharp/omnisharpUnitTests/options.test.ts b/test/omnisharp/omnisharpUnitTests/options.test.ts index a07b9c099..b9aa409e1 100644 --- a/test/omnisharp/omnisharpUnitTests/options.test.ts +++ b/test/omnisharp/omnisharpUnitTests/options.test.ts @@ -41,60 +41,62 @@ describe('Options tests', () => { expect(commonOptions.runSettingsPath).toEqual(''); }); - test('Verify return no excluded paths when files.exclude empty', () => { - vscode.workspace.getConfiguration().update('files.exclude', {}); + test('Verify return no excluded paths when files.exclude empty', async () => { + await vscode.workspace.getConfiguration().update('files.exclude', {}); const excludedPaths = commonOptions.excludePaths; expect(excludedPaths).toHaveLength(0); }); - test('Verify return excluded paths when files.exclude populated', () => { - vscode.workspace.getConfiguration().update('files.exclude', { '**/node_modules': true, '**/assets': false }); + test('Verify return excluded paths when files.exclude populated', async () => { + await vscode.workspace + .getConfiguration() + .update('files.exclude', { '**/node_modules': true, '**/assets': false }); const excludedPaths = commonOptions.excludePaths; expect(excludedPaths).toStrictEqual(['**/node_modules']); }); - test('Verify return no excluded paths when files.exclude and search.exclude empty', () => { - vscode.workspace.getConfiguration().update('files.exclude', {}); - vscode.workspace.getConfiguration().update('search.exclude', {}); + test('Verify return no excluded paths when files.exclude and search.exclude empty', async () => { + await vscode.workspace.getConfiguration().update('files.exclude', {}); + await vscode.workspace.getConfiguration().update('search.exclude', {}); const excludedPaths = commonOptions.excludePaths; expect(excludedPaths).toHaveLength(0); }); - test('BACK-COMPAT: "omnisharp.loggingLevel": "verbose" == "omnisharp.loggingLevel": "debug"', () => { - vscode.workspace.getConfiguration().update('omnisharp.loggingLevel', 'verbose'); + test('BACK-COMPAT: "omnisharp.loggingLevel": "verbose" == "omnisharp.loggingLevel": "debug"', async () => { + await vscode.workspace.getConfiguration().update('omnisharp.loggingLevel', 'verbose'); expect(omnisharpOptions.loggingLevel).toEqual('debug'); }); - test('BACK-COMPAT: "csharp.omnisharp" is used if it is set and "omnisharp.path" is not', () => { - vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); + test('BACK-COMPAT: "csharp.omnisharp" is used if it is set and "omnisharp.path" is not', async () => { + await vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); expect(commonOptions.serverPath).toEqual('OldPath'); }); - test('BACK-COMPAT: "csharp.omnisharp" is not used if "omnisharp.path" is set', () => { - vscode.workspace.getConfiguration().update('omnisharp.path', 'NewPath'); - vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); + test('BACK-COMPAT: "csharp.omnisharp" is not used if "omnisharp.path" is set', async () => { + await vscode.workspace.getConfiguration().update('omnisharp.path', 'NewPath'); + await vscode.workspace.getConfiguration().update('csharp.omnisharp', 'OldPath'); expect(commonOptions.serverPath).toEqual('NewPath'); }); - test('"omnisharp.defaultLaunchSolution" is used if set', () => { + test('"omnisharp.defaultLaunchSolution" is used if set', async () => { const workspaceFolderUri = URI.file('/Test'); jest.replaceProperty(vscode.workspace, 'workspaceFolders', [ { index: 0, name: 'Test', uri: workspaceFolderUri }, ]); - vscode.workspace.getConfiguration().update('omnisharp.defaultLaunchSolution', 'some_valid_solution.sln'); + await vscode.workspace.getConfiguration().update('omnisharp.defaultLaunchSolution', 'some_valid_solution.sln'); expect(commonOptions.defaultSolution).toEqual(path.join(workspaceFolderUri.fsPath, 'some_valid_solution.sln')); }); - test('"omnisharp.testRunSettings" is used if set', () => { - vscode.workspace + test('"omnisharp.testRunSettings" is used if set', async () => { + await vscode.workspace .getConfiguration() .update('omnisharp.testRunSettings', 'some_valid_path\\some_valid_runsettings_files.runsettings'); diff --git a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts index 15c4102d9..577579389 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts @@ -125,7 +125,7 @@ describe('FileDownloader', () => { } catch { /* empty */ } - expect(downloadPromise).rejects.toThrow(); + await expect(downloadPromise).rejects.toThrow(); }); test('Download Start and Download Failure events are created', async () => { diff --git a/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts index b963342fa..f5cf1b84b 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/zipInstaller.test.ts @@ -67,7 +67,7 @@ describe('ZipInstaller', () => { }); test('Error is thrown when the buffer contains an invalid zip', async () => { - expect( + await expect( InstallZip(Buffer.from('My file', 'utf8'), 'Text File', installationPath, [], eventStream) ).rejects.toThrow(); }); diff --git a/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts b/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts index 2497d4c45..be20f86f8 100644 --- a/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts +++ b/test/omnisharp/omnisharpUnitTests/testAssets/testZip.ts @@ -37,7 +37,7 @@ export default class TestZip { archive.on('error', reject); archive.on('end', () => resolve(Buffer.concat(buffers))); filesToAdd.forEach((elem) => archive.append(elem.content, { name: elem.path })); - archive.finalize(); + archive.finalize().catch((any) => reject(any)); }); return new TestZip(finalBuffer, filesToAdd); diff --git a/test/omnisharp/runFeatureTests.ts b/test/omnisharp/runFeatureTests.ts index b2003986f..ac2304730 100644 --- a/test/omnisharp/runFeatureTests.ts +++ b/test/omnisharp/runFeatureTests.ts @@ -31,4 +31,6 @@ async function main() { } } +// top level async not supported in our version of ts/modules +// eslint-disable-next-line @typescript-eslint/no-floating-promises main(); From 5ed63ddbf81f534f4735fbea2aa36dd420c61c86 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Tue, 24 Sep 2024 16:12:54 -0700 Subject: [PATCH 084/100] Update Debugger packages to v2.50.0 (#7597) This updates the debugger to the 2.50.0 version. This version contains mostly minor changes. The most significant change is this correctly signs a few ARM64 files which were missing signing. --- package.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index efcbbe5c1..68120dd0a 100644 --- a/package.json +++ b/package.json @@ -420,7 +420,7 @@ { "id": "Debugger", "description": ".NET Core Debugger (Windows / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-win7-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-win7-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "win32" @@ -430,12 +430,12 @@ "arm64" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui.exe", - "integrity": "3D8F046E44F7E7A5A4B6C24468D2AEBC4773F28E66F9E732D3D5E76F79C3DB32" + "integrity": "AFA82E9A8C244FA614A3ACDABCF5B7C9703811393D18E2125C2018E32D08FD6F" }, { "id": "Debugger", "description": ".NET Core Debugger (Windows / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-win10-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-win10-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "win32" @@ -444,12 +444,12 @@ "arm64" ], "installTestPath": "./.debugger/arm64/vsdbg-ui.exe", - "integrity": "142B58C35C70D31094AF4AB31A2B11BDB4FA747811D086AB079AD260EF00ACBC" + "integrity": "73D9ACB6697CC483F3FBDA562EA434316ED2DD876BCD8E313624CD20F2DE808B" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-osx-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-osx-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "darwin" @@ -463,12 +463,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui", - "integrity": "BCABF433604B2206F08638EDE8DF921CF8807E23D48824F320BA1829CB0A8BDD" + "integrity": "49BBC3A34AD5B993BA2A10735785F709E7C3DFE3A434BE88917959211F03E501" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / arm64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-osx-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-osx-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "darwin" @@ -481,12 +481,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/arm64/vsdbg-ui", - "integrity": "641E189D1ECF36506FFEE29E85131AFC5575172435F3D67A5E1B55861270FA45" + "integrity": "5007BB60158E593C1C559CFDCDAF93CCC4BB84D7971656494B301263D822BD04" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-arm.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-arm.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -499,12 +499,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "F4932D5E5C01F4147D3735177496B8DE922A92A9B975CC89D52C2227F008B193" + "integrity": "2D68C4C2D2EDB7BC7B27F542E3021B0F813445C9DE268BA2A316F02107233167" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-arm64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -517,12 +517,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "3E3BBCF80931FA704CF33CD1BAE72E0FE0E021968070FC6D4156BBC2BD797D77" + "integrity": "0F8782168C76C939135A0FB14B682A582170B0A1606242D44BD1A37E6ACCE936" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-musl-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-musl-x64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -535,12 +535,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "5B83C49084D3A5F314AD18E25DE8042DF6D17335A6535A60307ADF07A777CB49" + "integrity": "CB7ADA2C813F1008282534150967E379767477C1BFD63C21419E0A02F59FD71D" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / ARM64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-musl-arm64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-musl-arm64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -553,12 +553,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "633C5F3A419CDED6842088BFAF8F4F52CDEF0149F3DBC1BB5BA2AA87F159A21F" + "integrity": "24C70056FAC4F87396BCE795A2CB8BB10CCB0F652CEFAAF0B63CF05360E90192" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / x64)", - "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-47-0/coreclr-debug-linux-x64.zip", + "url": "https://vsdebugger.azureedge.net/coreclr-debug-2-50-0/coreclr-debug-linux-x64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -571,7 +571,7 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "83D55C4BF672F6369E6C152DA7888398824AE59136F224B098154F5F41FD16FA" + "integrity": "FFBDE7002BA9C1532989BB0145333DBD6527173395D58D389302968B72849214" }, { "id": "RazorOmnisharp", @@ -5592,4 +5592,4 @@ } } } -} +} \ No newline at end of file From f4316361c9c598df4d6235268eb86aad6765724a Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 24 Sep 2024 16:54:49 -0700 Subject: [PATCH 085/100] Cleanup --- src/lsptoolshost/optionChanges.ts | 2 -- src/lsptoolshost/restore.ts | 1 - src/shared/configurationProvider.ts | 2 +- src/shared/observers/utils/showMessage.ts | 21 +++++++-------------- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/lsptoolshost/optionChanges.ts b/src/lsptoolshost/optionChanges.ts index 1536eb47f..4a66b2228 100644 --- a/src/lsptoolshost/optionChanges.ts +++ b/src/lsptoolshost/optionChanges.ts @@ -40,7 +40,6 @@ function handleLanguageServerOptionChanges(changedOptions: OptionChanges): void }; if (changedOptions.changedCommonOptions.find((key) => key === 'useOmnisharpServer')) { // If the user has changed the useOmnisharpServer flag we need to reload the window. - // Intentionally not awaiting this promise - we don't want to block handling changes on showing the notification prompt. showInformationMessage( vscode, vscode.l10n.t( @@ -56,6 +55,5 @@ function handleLanguageServerOptionChanges(changedOptions: OptionChanges): void const message = vscode.l10n.t( 'C# configuration has changed. Would you like to reload the window to apply your changes?' ); - // Intentionally not awaiting this promise - we don't want to block handling changes on showing the notification prompt. showInformationMessage(vscode, message, reloadTitle); } diff --git a/src/lsptoolshost/restore.ts b/src/lsptoolshost/restore.ts index 9f3ba51d8..4ea9f8599 100644 --- a/src/lsptoolshost/restore.ts +++ b/src/lsptoolshost/restore.ts @@ -80,7 +80,6 @@ export async function restore( showOutput: boolean ): Promise { if (_restoreInProgress) { - // Show error message but don't await the dismissal of it. showErrorMessage(vscode, vscode.l10n.t('Restore already in progress')); return; } diff --git a/src/shared/configurationProvider.ts b/src/shared/configurationProvider.ts index a58117ab7..8c4360ef6 100644 --- a/src/shared/configurationProvider.ts +++ b/src/shared/configurationProvider.ts @@ -245,7 +245,7 @@ export class BaseVsDbgConfigurationProvider implements vscode.DebugConfiguration action: async () => { const returnData = await createSelfSignedCert(dotnetPath); if (returnData.error === null) { - //if the prcess returns 0, returnData.error is null, otherwise the return code can be acessed in returnData.error.code + // if the process returns 0, returnData.error is null, otherwise the return code can be accessed in returnData.error.code const message = errorCode === CertToolStatusCodes.CertificateNotTrusted ? 'trusted' : 'created'; showInformationMessage( diff --git a/src/shared/observers/utils/showMessage.ts b/src/shared/observers/utils/showMessage.ts index 00f049027..6771a5dc9 100644 --- a/src/shared/observers/utils/showMessage.ts +++ b/src/shared/observers/utils/showMessage.ts @@ -81,22 +81,15 @@ function showMessage( delegateFunc(message, messageOptions, ...items).then( async (selectedItem) => { if (selectedItem) { - const item = items.find((i) => i); - if (item === undefined) { - // This should never happen - we got an item back that we didn't provide - throw new Error( - `Could not find item with message: ${selectedItem}; items:${JSON.stringify(items)}` - ); - } - if (typeof item === 'string') { + if (typeof selectedItem === 'string') { return; - } else if ('action' in item && item.action) { - await item.action(); - } else if ('command' in item && item.command) { - if (item.arguments) { - await vscode.commands.executeCommand(item.command, ...item.arguments); + } else if ('action' in selectedItem && selectedItem.action) { + await selectedItem.action(); + } else if ('command' in selectedItem && selectedItem.command) { + if (selectedItem.arguments) { + await vscode.commands.executeCommand(selectedItem.command, ...selectedItem.arguments); } else { - await vscode.commands.executeCommand(item.command); + await vscode.commands.executeCommand(selectedItem.command); } } } From cd1aa95a6611004f56d18d9d76aa3b73be93b236 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 24 Sep 2024 17:13:18 -0700 Subject: [PATCH 086/100] Fix test mocks --- .../unitTests/languageServerConfigChangeObserver.test.ts | 6 +++++- .../omnisharpUnitTests/informationMessageObserver.test.ts | 2 +- .../logging/warningMessageObserver.test.ts | 3 ++- .../omnisharpUnitTests/optionChangeObserver.test.ts | 6 +++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts index e3b88e425..6b8ef6750 100644 --- a/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts +++ b/test/lsptoolshost/unitTests/languageServerConfigChangeObserver.test.ts @@ -128,7 +128,11 @@ describe('Option changes observer', () => { }); function resetMocks() { - vscode.window.showInformationMessage = async (message: string, ...items: T[]) => { + vscode.window.showInformationMessage = async ( + message: string, + _options: vscode.MessageOptions, + ...items: T[] + ) => { infoMessage = message; return new Promise((resolve) => { doClickCancel = () => { diff --git a/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts index c19a88d2e..d04aef960 100644 --- a/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/informationMessageObserver.test.ts @@ -33,7 +33,7 @@ describe('InformationMessageObserver', () => { jest.spyOn(vscode.window, 'showInformationMessage').mockImplementation( // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore - async (message: string, ...items: T[]) => { + async (message: string, _options: vscode.MessageOptions, ...items: T[]) => { infoMessage = message; return new Promise((resolve) => { doClickCancel = () => { diff --git a/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts index d0e1e19a7..053c03a78 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/warningMessageObserver.test.ts @@ -14,6 +14,7 @@ import { vscode } from '../../../../src/vscodeAdapter'; import { TestScheduler } from 'rxjs/testing'; import { from as observableFrom, Subject } from 'rxjs'; import { timeout, map } from 'rxjs/operators'; +import { MessageOptions } from 'vscode'; describe('WarningMessageObserver', () => { let doClickOk: () => void; @@ -32,7 +33,7 @@ describe('WarningMessageObserver', () => { let observer: WarningMessageObserver; const vscode: vscode = getFakeVsCode(); - vscode.window.showWarningMessage = async (message: string, ...items: T[]) => { + vscode.window.showWarningMessage = async (message: string, _options: MessageOptions, ...items: T[]) => { warningMessages.push(message); assertionObservable.next(`[${warningMessages.length}] ${message}`); return new Promise((resolve) => { diff --git a/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts index 32f7d3b05..29af13fbf 100644 --- a/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/optionChangeObserver.test.ts @@ -121,7 +121,11 @@ describe('OmniSharpConfigChangeObserver', () => { }); function resetMocks() { - vscode.window.showInformationMessage = async (message: string, ...items: T[]) => { + vscode.window.showInformationMessage = async ( + message: string, + _options: vscode.MessageOptions, + ...items: T[] + ) => { infoMessage = message; return new Promise((resolve) => { doClickCancel = () => { From 59f1303d3ca716adcc3ac734b3415ef46072e907 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 24 Sep 2024 17:47:29 -0700 Subject: [PATCH 087/100] Remove unnecessary configuration update that was throwing --- .../omnisharpIntegrationTests/integrationHelpers.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 8a95746ed..8d6059fe0 100644 --- a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -17,16 +17,6 @@ export interface ActivationResult { } export async function activateCSharpExtension(): Promise { - const configuration = vscode.workspace.getConfiguration(); - await configuration.update( - 'omnisharp.enableLspDriver', - process.env.OMNISHARP_DRIVER === 'lsp' ? true : false, - vscode.ConfigurationTarget.WorkspaceFolder - ); - if (process.env.OMNISHARP_LOCATION) { - await configuration.update('path', process.env.OMNISHARP_LOCATION, vscode.ConfigurationTarget.WorkspaceFolder); - } - const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); if (!csharpExtension) { throw new Error('Failed to find installation of ms-dotnettools.csharp'); From bb0b76c26274a2bb834d91436c5461a7951ee0c8 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 24 Sep 2024 18:23:45 -0700 Subject: [PATCH 088/100] Fix O# integration tests by not blocking activation on server start --- src/omnisharp/omnisharpLanguageServer.ts | 5 ++++- .../omnisharpIntegrationTests/integrationHelpers.ts | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index bd9be3cdb..9fa3399b3 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -310,7 +310,10 @@ async function activate( ); if (omnisharpOptions.autoStart) { - await server.autoStart(context.workspaceState.get('lastSolutionPathOrFolder', '')); + // We intentionally do not await this as we don't want to block activation on the server starting. + server.autoStart(context.workspaceState.get('lastSolutionPathOrFolder', '')).catch((err) => { + throw err; + }); } // stop server on deactivate diff --git a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts index 8d6059fe0..60ab78821 100644 --- a/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts +++ b/test/omnisharp/omnisharpIntegrationTests/integrationHelpers.ts @@ -57,8 +57,8 @@ export async function restartOmniSharpServer(): Promise { resolve(); } }); + vscode.commands.executeCommand('o.restart'); }); - await vscode.commands.executeCommand('o.restart'); console.log('OmniSharp restarted'); } catch (err) { console.log(JSON.stringify(err)); From ff545df0edb32067eca54ba61418a2c8fc1333e2 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 25 Sep 2024 09:35:44 -0400 Subject: [PATCH 089/100] Bumped XamlTools to 17.12.35324.244 Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/2238781 --- CHANGELOG.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c7edc5b..2ecd87168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.50.x +* Bumped xamltools to 17.12.35324.244 (PR: [#7600](https://github.com/dotnet/vscode-csharp/pull/7600)) # 2.49.x * Update Razor to 9.0.0-preview.24467.1 diff --git a/package.json b/package.json index 68120dd0a..35c00c421 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.35319.159" + "xamlTools": "17.12.35324.244" }, "main": "./dist/extension", "l10n": "./l10n", From 96a22561ff04720ec03768a2f22d5b04d0f3f998 Mon Sep 17 00:00:00 2001 From: "gel@microsoft.com" Date: Thu, 26 Sep 2024 10:45:37 -0700 Subject: [PATCH 090/100] update to new registerRelatedFilesProvider API --- src/lsptoolshost/copilot.ts | 99 +++++++++++++----------- src/lsptoolshost/roslynLanguageServer.ts | 4 +- 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts index 53a67912b..cae2fa1d5 100644 --- a/src/lsptoolshost/copilot.ts +++ b/src/lsptoolshost/copilot.ts @@ -14,11 +14,14 @@ import { languageServerOptions } from '../shared/options'; interface CopilotRelatedFilesProviderRegistration { registerRelatedFilesProvider( providerId: { extensionId: string; languageId: string }, - callback: (uri: vscode.Uri) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> - ): void; + callback: ( + uri: vscode.Uri, + cancellationToken: vscode.CancellationToken + ) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> + ): vscode.Disposable; } -export async function registerCopilotExtensionAsync( +export function registerCopilotExtension( languageServer: RoslynLanguageServer, channel: vscode.OutputChannel ) { @@ -35,58 +38,60 @@ export async function registerCopilotExtensionAsync( } return; } - await ext.activate(); - const relatedAPI = ext.exports as CopilotRelatedFilesProviderRegistration | undefined; - if (!relatedAPI) { - if (isTraceLogLevel) { - channel.appendLine( - 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' - ); + ext.activate().then(() => { + const relatedAPI = ext.exports as CopilotRelatedFilesProviderRegistration | undefined; + if (!relatedAPI) { + if (isTraceLogLevel) { + channel.appendLine( + 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' + ); + } + return; } - return; - } - if (isTraceLogLevel) { - channel.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, - languageId: 'csharp', - }; + const id = { + extensionId: CSharpExtensionId, + languageId: 'csharp', + }; - relatedAPI.registerRelatedFilesProvider(id, async (uri) => { - 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) { - builder?.push(vscode.Uri.file(filePath)); + relatedAPI.registerRelatedFilesProvider(id, async (uri, token) => { + 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) { + builder?.push(vscode.Uri.file(filePath)); + } } } } - } - }; - const relatedFiles: vscode.Uri[] = []; - const uriString = UriConverter.serialize(uri); - const textDocument = TextDocumentIdentifier.create(uriString); - try { - await languageServer.sendRequestWithProgress( - CopilotRelatedDocumentsRequest.type, - { - _vs_textDocument: textDocument, - position: { - line: 0, - character: 0, + }; + const relatedFiles: vscode.Uri[] = []; + const uriString = UriConverter.serialize(uri); + const textDocument = TextDocumentIdentifier.create(uriString); + try { + await languageServer.sendRequestWithProgress( + CopilotRelatedDocumentsRequest.type, + { + _vs_textDocument: textDocument, + position: { + line: 0, + character: 0, + }, }, - }, - async (r) => buildResult(r, relatedFiles) - ); - } catch (e) { - if (e instanceof Error) { - channel.appendLine(e.message); + async (r) => buildResult(r, relatedFiles), + token + ); + } catch (e) { + if (e instanceof Error) { + channel.appendLine(e.message); + } } - } - return { entries: relatedFiles }; + return { entries: relatedFiles }; + }); }); } diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index 5a621c2a5..023608c54 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -67,7 +67,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 { registerCopilotExtensionAsync } from './copilot'; +import { registerCopilotExtension } from './copilot'; import { ActionOption, CommandOption, @@ -1052,7 +1052,7 @@ export async function activateRoslynLanguageServer( ); registerLanguageStatusItems(context, languageServer, languageServerEvents); - await registerCopilotExtensionAsync(languageServer, _channel); + registerCopilotExtension(languageServer, _channel); // Register any commands that need to be handled by the extension. registerCommands(context, languageServer, hostExecutableResolver, _channel); From c4e4b070b61bd7b6db326584c07e9b849970ff86 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 26 Sep 2024 11:08:24 -0700 Subject: [PATCH 091/100] exclude some debugger binaries from codesign validation --- azure-pipelines-official.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure-pipelines-official.yml b/azure-pipelines-official.yml index 6049657c2..05e500614 100644 --- a/azure-pipelines-official.yml +++ b/azure-pipelines-official.yml @@ -50,6 +50,10 @@ extends: tsa: enabled: true configFile: '$(Build.SourcesDirectory)/.config/guardian/TSAConfig.gdntsa' + codeSignValidation: + # VCTools dlls are signed with the Phone cert, which isn't accepted by the CodeSign policy. + # Can be removed once https://dev.azure.com/devdiv/DevDiv/_workitems/edit/2093995 is fixed. + additionalTargetsGlobPattern: '-|**\msdia140.dll;-|**\msvc*.dll;-|**\vcruntime*.dll' customBuildTags: - ES365AIMigrationTooling stages: From fbad8a25fc8850415cb633375466818b2b5165b7 Mon Sep 17 00:00:00 2001 From: Gen Lu Date: Thu, 26 Sep 2024 11:20:25 -0700 Subject: [PATCH 092/100] Update src/lsptoolshost/copilot.ts Co-authored-by: David Barbet --- src/lsptoolshost/copilot.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts index cae2fa1d5..958e7c04f 100644 --- a/src/lsptoolshost/copilot.ts +++ b/src/lsptoolshost/copilot.ts @@ -50,7 +50,7 @@ export function registerCopilotExtension( } if (isTraceLogLevel) { - channel.appendLine('registeration of C# related files provider for GitHub Copilot extension succeeded.'); + channel.appendLine('registration of C# related files provider for GitHub Copilot extension succeeded.'); } const id = { From 202c67fbb1a17e96ffbe880531456a6127337091 Mon Sep 17 00:00:00 2001 From: "gel@microsoft.com" Date: Thu, 26 Sep 2024 11:21:09 -0700 Subject: [PATCH 093/100] format --- src/lsptoolshost/copilot.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts index cae2fa1d5..eeb7a0b95 100644 --- a/src/lsptoolshost/copilot.ts +++ b/src/lsptoolshost/copilot.ts @@ -21,10 +21,7 @@ interface CopilotRelatedFilesProviderRegistration { ): vscode.Disposable; } -export function registerCopilotExtension( - languageServer: RoslynLanguageServer, - channel: vscode.OutputChannel -) { +export function registerCopilotExtension(languageServer: RoslynLanguageServer, channel: vscode.OutputChannel) { const isTraceLogLevel = languageServerOptions.logLevel && (languageServerOptions.logLevel === 'Trace' || languageServerOptions.logLevel === 'Debug'); From dd4e612169b34a2fb4451323f7a087309c35940a Mon Sep 17 00:00:00 2001 From: "gel@microsoft.com" Date: Thu, 26 Sep 2024 11:34:26 -0700 Subject: [PATCH 094/100] fix --- src/lsptoolshost/copilot.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts index eafe79da7..a3c6b3043 100644 --- a/src/lsptoolshost/copilot.ts +++ b/src/lsptoolshost/copilot.ts @@ -16,7 +16,7 @@ interface CopilotRelatedFilesProviderRegistration { providerId: { extensionId: string; languageId: string }, callback: ( uri: vscode.Uri, - cancellationToken: vscode.CancellationToken + cancellationToken?: vscode.CancellationToken ) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> ): vscode.Disposable; } From 148c19f5ca63b2fb1829f95ab2ae1f5bc84d3959 Mon Sep 17 00:00:00 2001 From: Andrew Hall Date: Thu, 26 Sep 2024 16:24:23 -0700 Subject: [PATCH 095/100] Do not remove documents if they are not files (#7607) Fixes AB#2261836 When the preview changes window closes, it issues a document closed for a document being tracked but with a URI of 'vscode-bulkeditpreview-editor'. This is a valid notification for closing a document but it should not be removed because that will cause the content to be lost making the client and server out of sync for what it thinks the csharp/html code is --- src/razor/src/document/razorDocumentManager.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/razor/src/document/razorDocumentManager.ts b/src/razor/src/document/razorDocumentManager.ts index ab1820655..066073f40 100644 --- a/src/razor/src/document/razorDocumentManager.ts +++ b/src/razor/src/document/razorDocumentManager.ts @@ -193,11 +193,13 @@ export class RazorDocumentManager implements IRazorDocumentManager { private closeDocument(uri: vscode.Uri) { const document = this._getDocument(uri); - // Files outside of the workspace will return undefined from getWorkspaceFolder - const workspaceFolder = vscode.workspace.getWorkspaceFolder(uri); - if (!workspaceFolder) { - // Out of workspace files should be removed once they're closed - this.removeDocument(uri); + // Documents that are files should be removed if they are outside the workspace folder + if (uri.scheme === 'file') { + // Files outside of the workspace will return undefined from getWorkspaceFolder + const workspaceFolder = vscode.workspace.getWorkspaceFolder(uri); + if (!workspaceFolder) { + this.removeDocument(uri); + } } this.notifyDocumentChange(document, RazorDocumentChangeKind.closed); From 954e95ced2b05ae79d9894ee408eb40fad8f5609 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 26 Sep 2024 21:35:43 -0700 Subject: [PATCH 096/100] Update .gdnbaselines --- .config/guardian/.gdnbaselines | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.config/guardian/.gdnbaselines b/.config/guardian/.gdnbaselines index ad1c9aa80..4db404c41 100644 --- a/.config/guardian/.gdnbaselines +++ b/.config/guardian/.gdnbaselines @@ -1,8 +1,8 @@ { - "hydrated": true, + "hydrated": false, "properties": { "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines", - "hydrationStatus": "This file contains identifying data. It is **NOT** safe to check into your repo. To dehydrate this file, run `guardian dehydrate --help` and follow the guidance." + "hydrationStatus": "This file does not contain identifying data. It is safe to check into your repo. To hydrate this file with identifying data, run `guardian hydrate --help` and follow the guidance." }, "version": "1.0.0", "baselines": { @@ -16,13 +16,9 @@ "26445e3e484940d2d58c2ffc32ab3895fca4b1589d66e2f2dee2fa01f2c479fb": { "signature": "26445e3e484940d2d58c2ffc32ab3895fca4b1589d66e2f2dee2fa01f2c479fb", "alternativeSignatures": [], - "target": "test/omnisharp/omnisharpUnitTests/testAssets/private.pem", - "line": 1, "memberOf": [ "default" ], - "tool": "credscan", - "ruleId": "CSCAN-GENERAL0020", "createdDate": "2024-09-09 19:35:36Z" } } From 7fff1102c5b2f171cf034d9347a4ecf6fd1836fa Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 27 Sep 2024 09:53:59 -0400 Subject: [PATCH 097/100] Bump XamlTools to 17.12.35326.17 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ecd87168..d83abdc50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ - 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 +* Bumped xamltools to 17.12.35326.17 (PR: [#7610](https://github.com/dotnet/vscode-csharp/pull/7610)) + # 2.50.x * Bumped xamltools to 17.12.35324.244 (PR: [#7600](https://github.com/dotnet/vscode-csharp/pull/7600)) diff --git a/package.json b/package.json index 35c00c421..041cf1aa9 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.35324.244" + "xamlTools": "17.12.35326.17" }, "main": "./dist/extension", "l10n": "./l10n", From c87a7048a10e8a5e4595dee897bfaad629bab54b Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 27 Sep 2024 09:58:40 -0400 Subject: [PATCH 098/100] Update npm packages to resolve audit warnings --- package-lock.json | 1381 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 1042 insertions(+), 339 deletions(-) diff --git a/package-lock.json b/package-lock.json index c290c8ef6..c77e54d1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2279,62 +2279,113 @@ } }, "node_modules/@octokit/app": { - "version": "14.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.0.0.tgz", - "integrity": "sha512-g/zDXttroZ9Se08shK0d0d/j0cgSA+h4WV7qGUevNEM0piNBkIlfb4Fm6bSwCNAZhNf72mBgERmYOoxicPkqdw==", + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha1-LUkdxwdGdzuD9h7fXFaBfdfThUs=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-app": "^6.0.0", "@octokit/auth-unauthenticated": "^5.0.0", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/types": "^11.1.0", - "@octokit/webhooks": "^12.0.1" + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/types": "^12.0.0", + "@octokit/webhooks": "^12.0.4" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/app/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/app/node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha1-LiovD1LJpLHaGjqhfavjxFm55AE=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/app/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/auth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.0.0.tgz", - "integrity": "sha512-OKct7Rukf3g9DjpzcpdacQsdmd6oPrJ7fZND22JkjzhDvfhttUOnmh+qPS4kHhaNNyTxqSThnfrUWvkqNLd1nw==", + "version": "6.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.1.2.tgz", + "integrity": "sha1-Gf8dfy/6XtYw1Gj6RTMOpZs5tHw=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.3.1", "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.1", + "universal-github-app-jwt": "^1.1.2", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", "dev": true, - "engines": { - "node": "14 || >=16.14" + "license": "MIT" + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, + "node_modules/@octokit/auth-app/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=", + "dev": true, + "license": "ISC" + }, "node_modules/@octokit/auth-oauth-app": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.0.tgz", - "integrity": "sha512-8JvJEXGoEqrbzLwt3SwIUvkDd+1wrM8up0KawvDIElB8rbxPbvWppGO0SLKAWSJ0q8ILcVq+mWck6pDcZ3a9KA==", + "version": "7.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha1-0PdOGevVpIKct4DBB87dbIlPIPw=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" @@ -2343,31 +2394,67 @@ "node": ">= 18" } }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/auth-oauth-device": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.0.tgz", - "integrity": "sha512-Zgf/LKhwWk54rJaTGYVYtbKgUty+ouil6VQeRd+pCw7Gd0ECoSWaZuHK6uDGC/HtnWHjpSWFhzxPauDoHcNRtg==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha1-+GghOj2wX+J+aNH8YHUCoyI3ndk=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^11.0.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 18" } }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/auth-oauth-user": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.0.tgz", - "integrity": "sha512-VOm5aIkVGHaOhIvsF/4YmSjoYDzzrKbbYkdSEO0KqHK7I8SlO3ZndSikQ1fBlNPUEH0ve2BOTxLrVvI1qBf9/Q==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha1-MuVSn4vZYa+YOaH4xqsMitIYTu4=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" }, @@ -2375,6 +2462,23 @@ "node": ">= 18" } }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/auth-token": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-token/-/auth-token-4.0.0.tgz", @@ -2384,18 +2488,36 @@ } }, "node_modules/@octokit/auth-unauthenticated": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.0.tgz", - "integrity": "sha512-AjOI6FNB2dweJ85p6rf7D4EhE4y6VBcwYfX/7KJkR5Q9fD9ET6NABAjajUTSNFfCxmNIaQgISggZ3pkgwtTqsA==", + "version": "5.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", + "integrity": "sha1-2AMiEXKDMwaLLge1OZfCnlmgNQc=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0" + "@octokit/types": "^12.0.0" }, "engines": { "node": ">= 18" } }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/core": { "version": "5.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/core/-/core-5.0.0.tgz", @@ -2414,24 +2536,31 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha1-5sDuaE4wdhTAL8asEidMUNpGXEQ=", + "license": "MIT", "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "license": "MIT" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@octokit/graphql": { @@ -2448,10 +2577,11 @@ } }, "node_modules/@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha1-IsJ29q0jZMaZmDe/3V2cEJKDhyY=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-oauth-app": "^7.0.0", "@octokit/auth-oauth-user": "^4.0.0", @@ -2469,28 +2599,47 @@ "node_modules/@octokit/oauth-authorization-url": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", + "integrity": "sha1-zILKKcxeM5yZIWcvOfKz9cjrbvI=", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/oauth-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.0.0.tgz", - "integrity": "sha512-dqy7BZLfLbi3/8X8xPKUKZclMEK9vN3fK5WF3ortRvtplQTszFvdAGbTo71gGLO+4ZxspNiLjnqdd64Chklf7w==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha1-FAOsnE1OJ3ki/dxMifqKeC+PeRs=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0" }, "engines": { "node": ">= 18" } }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, "node_modules/@octokit/openapi-types": { "version": "18.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", @@ -2565,12 +2714,13 @@ } }, "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "version": "8.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha1-nsPqLje5L6xj8GkR0MgUG0bcSUE=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.2.0", "bottleneck": "^2.15.3" }, "engines": { @@ -2580,15 +2730,32 @@ "@octokit/core": "^5.0.0" } }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "version": "8.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha1-f0t7Hao9H0jAl3rY//osGK3viXQ=", + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2596,11 +2763,12 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "version": "5.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha1-7kE4U40IyBpgvj8yDNcQYwZKOzA=", + "license": "MIT", "dependencies": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -2608,12 +2776,34 @@ "node": ">= 18" } }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "license": "MIT" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "license": "MIT" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@octokit/rest": { @@ -2639,14 +2829,15 @@ } }, "node_modules/@octokit/webhooks": { - "version": "12.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.0.3.tgz", - "integrity": "sha512-8iG+/yza7hwz1RrQ7i7uGpK2/tuItZxZq1aTmeg2TNp2xTUB8F8lZF/FcZvyyAxT8tpDMF74TjFGCDACkf1kAQ==", + "version": "12.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.2.0.tgz", + "integrity": "sha1-6h7i2dnFpLe1P/i8ZKn+sNrJQWE=", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.4.0", "aggregate-error": "^3.1.0" }, "engines": { @@ -2654,19 +2845,21 @@ } }, "node_modules/@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha1-aBpshsmyHU7J4pEI+wU651Er4DM=", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==", - "dev": true + "version": "7.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz", + "integrity": "sha1-ftFcdZCGg6NOAHnIDyYf5Wi4c5U=", + "dev": true, + "license": "MIT" }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", @@ -2712,10 +2905,11 @@ } }, "node_modules/@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==", - "dev": true + "version": "8.10.145", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha1-stMamH9IiOVVP/GBn1fK+kdVlNk=", + "dev": true, + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.1", @@ -2759,10 +2953,11 @@ } }, "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==", - "dev": true + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha1-grtqqwCr98/zyiglq+AQwM1TauU=", + "dev": true, + "license": "MIT" }, "node_modules/@types/chokidar": { "version": "2.1.3", @@ -2889,10 +3084,11 @@ "dev": true }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "version": "9.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha1-5JuWwrKTVu1GLpcI/HO4MwFHJ9I=", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4173,8 +4369,9 @@ "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", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4815,10 +5012,11 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha1-GVNDEiHG+1zWPEs21T+rCSjlSMY=", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -4828,7 +5026,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -5004,8 +5202,9 @@ "node_modules/btoa-lite": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "dev": true + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true, + "license": "MIT" }, "node_modules/buffer": { "version": "5.7.1", @@ -5088,13 +5287,20 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha1-BgFlmcQMVkmMGHadJzC+JCtvo7k=", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5310,8 +5516,9 @@ "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5720,6 +5927,24 @@ "node": ">=4.0.0" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha1-iU3BQbt9MGCuQ2b2oBB+aPvkjF4=", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -6125,6 +6350,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha1-x/rvvf+LJpbPX0aSHt+3fMS6OEU=", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -6443,10 +6691,11 @@ "dev": true }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", + "integrity": "sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ=", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7652,10 +7901,14 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -7704,15 +7957,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha1-44X1pLUifUScPqu60FSU7wq76t0=", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8176,12 +8434,13 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha1-lj7X0HHce/XwhMW/vg0bYiJYaFQ=", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8226,6 +8485,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/he/-/he-1.2.0.tgz", @@ -10986,15 +11258,22 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "version": "9.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", "dev": true, + "license": "MIT", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -11246,12 +11525,47 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -11264,6 +11578,13 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.union/-/lodash.union-4.6.0.tgz", @@ -11396,9 +11717,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha1-M+gZDZ/kdKmJVSX1YY7uE21GwuU=", + "version": "4.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=", "dev": true, "license": "MIT", "dependencies": { @@ -11921,10 +12242,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha1-3qAIhGf7mR5nr0BYFHokgkowQ/8=", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12003,24 +12328,74 @@ } }, "node_modules/octokit": { - "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.1.0.tgz", - "integrity": "sha512-dmIH5D+edpb4/ASd6ZGo6BiRR1g4ytu8lG4f+6XN/2AW+CSuTsT0nj1d6rv/HKgoflMQ1+rb3KlVWcvrmgQZhw==", + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.2.1.tgz", + "integrity": "sha1-03bKOxKmHFjaAqk8SR0uYnBpsZQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/app": "^14.0.2", + "@octokit/core": "^5.0.0", + "@octokit/oauth-app": "^6.0.0", + "@octokit/plugin-paginate-graphql": "^4.0.0", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-rest-endpoint-methods": "13.2.2", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^8.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/octokit/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true, + "license": "MIT" + }, + "node_modules/octokit/node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha1-/pLQS0nxNBZdb7txbnZcLzE602Q=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.5.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/octokit/node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha1-r45d0s3f6ldvkv+vnLhGWfMCpjg=", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/app": "^14.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-rest-endpoint-methods": "^9.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5" + } + }, + "node_modules/octokit/node_modules/@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/on-finished": { @@ -12707,12 +13082,13 @@ ] }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.13.0.tgz", + "integrity": "sha1-bKO9WEOffiRWVXmJl3h7DYilGQY=", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -13259,6 +13635,24 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha1-qscjFBmOrtl1z3eyw7a4gGleVEk=", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/setimmediate/-/setimmediate-1.0.5.tgz", @@ -13303,14 +13697,19 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha1-q9Jft80kuvRUZkBrEJa3gxySFfI=", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14396,13 +14795,14 @@ "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", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz", + "integrity": "sha1-jBhno5TX2dQs2jTxHRvLAjeX2N8=", "dev": true, + "license": "MIT", "dependencies": { "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" + "jsonwebtoken": "^9.0.2" } }, "node_modules/universal-user-agent": { @@ -17096,84 +17496,176 @@ } }, "@octokit/app": { - "version": "14.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.0.0.tgz", - "integrity": "sha512-g/zDXttroZ9Se08shK0d0d/j0cgSA+h4WV7qGUevNEM0piNBkIlfb4Fm6bSwCNAZhNf72mBgERmYOoxicPkqdw==", + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha1-LUkdxwdGdzuD9h7fXFaBfdfThUs=", "dev": true, "requires": { "@octokit/auth-app": "^6.0.0", "@octokit/auth-unauthenticated": "^5.0.0", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/types": "^11.1.0", - "@octokit/webhooks": "^12.0.1" + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/types": "^12.0.0", + "@octokit/webhooks": "^12.0.4" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha1-LiovD1LJpLHaGjqhfavjxFm55AE=", + "dev": true, + "requires": { + "@octokit/types": "^12.6.0" + } + }, + "@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^20.0.0" + } + } } }, "@octokit/auth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.0.0.tgz", - "integrity": "sha512-OKct7Rukf3g9DjpzcpdacQsdmd6oPrJ7fZND22JkjzhDvfhttUOnmh+qPS4kHhaNNyTxqSThnfrUWvkqNLd1nw==", + "version": "6.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-app/-/auth-app-6.1.2.tgz", + "integrity": "sha1-Gf8dfy/6XtYw1Gj6RTMOpZs5tHw=", "dev": true, "requires": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.3.1", "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.1", + "universal-github-app-jwt": "^1.1.2", "universal-user-agent": "^6.0.0" }, "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + }, "lru-cache": { - "version": "10.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "version": "10.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=", "dev": true } } }, "@octokit/auth-oauth-app": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.0.tgz", - "integrity": "sha512-8JvJEXGoEqrbzLwt3SwIUvkDd+1wrM8up0KawvDIElB8rbxPbvWppGO0SLKAWSJ0q8ILcVq+mWck6pDcZ3a9KA==", + "version": "7.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha1-0PdOGevVpIKct4DBB87dbIlPIPw=", "dev": true, "requires": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/auth-oauth-device": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.0.tgz", - "integrity": "sha512-Zgf/LKhwWk54rJaTGYVYtbKgUty+ouil6VQeRd+pCw7Gd0ECoSWaZuHK6uDGC/HtnWHjpSWFhzxPauDoHcNRtg==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha1-+GghOj2wX+J+aNH8YHUCoyI3ndk=", "dev": true, "requires": { - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^11.0.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/auth-oauth-user": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.0.tgz", - "integrity": "sha512-VOm5aIkVGHaOhIvsF/4YmSjoYDzzrKbbYkdSEO0KqHK7I8SlO3ZndSikQ1fBlNPUEH0ve2BOTxLrVvI1qBf9/Q==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha1-MuVSn4vZYa+YOaH4xqsMitIYTu4=", "dev": true, "requires": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^11.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/auth-token": { @@ -17182,13 +17674,30 @@ "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" }, "@octokit/auth-unauthenticated": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.0.tgz", - "integrity": "sha512-AjOI6FNB2dweJ85p6rf7D4EhE4y6VBcwYfX/7KJkR5Q9fD9ET6NABAjajUTSNFfCxmNIaQgISggZ3pkgwtTqsA==", + "version": "5.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", + "integrity": "sha1-2AMiEXKDMwaLLge1OZfCnlmgNQc=", "dev": true, "requires": { "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0" + "@octokit/types": "^12.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true + }, + "@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^20.0.0" + } + } } }, "@octokit/core": { @@ -17206,19 +17715,26 @@ } }, "@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha1-5sDuaE4wdhTAL8asEidMUNpGXEQ=", "requires": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=" + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "requires": { + "@octokit/openapi-types": "^22.2.0" + } } } }, @@ -17233,9 +17749,9 @@ } }, "@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha1-IsJ29q0jZMaZmDe/3V2cEJKDhyY=", "dev": true, "requires": { "@octokit/auth-oauth-app": "^7.0.0", @@ -17251,20 +17767,37 @@ "@octokit/oauth-authorization-url": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", + "integrity": "sha1-zILKKcxeM5yZIWcvOfKz9cjrbvI=", "dev": true }, "@octokit/oauth-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.0.0.tgz", - "integrity": "sha512-dqy7BZLfLbi3/8X8xPKUKZclMEK9vN3fK5WF3ortRvtplQTszFvdAGbTo71gGLO+4ZxspNiLjnqdd64Chklf7w==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha1-FAOsnE1OJ3ki/dxMifqKeC+PeRs=", "dev": true, "requires": { "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/openapi-types": { @@ -17313,42 +17846,81 @@ } }, "@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "version": "8.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha1-nsPqLje5L6xj8GkR0MgUG0bcSUE=", "dev": true, "requires": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.2.0", "bottleneck": "^2.15.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha1-nsLaoAkO64Ze4UdjbgwA9zeQxuU=", + "dev": true + }, + "@octokit/types": { + "version": "12.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha1-gQD7nu7f4IOq5mRzvZexW2Ku3LI=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^20.0.0" + } + } } }, "@octokit/request": { - "version": "8.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "version": "8.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha1-f0t7Hao9H0jAl3rY//osGK3viXQ=", "requires": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=" + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "requires": { + "@octokit/openapi-types": "^22.2.0" + } } } }, "@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "version": "5.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha1-7kE4U40IyBpgvj8yDNcQYwZKOzA=", "requires": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=" + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "@octokit/rest": { @@ -17371,27 +17943,27 @@ } }, "@octokit/webhooks": { - "version": "12.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.0.3.tgz", - "integrity": "sha512-8iG+/yza7hwz1RrQ7i7uGpK2/tuItZxZq1aTmeg2TNp2xTUB8F8lZF/FcZvyyAxT8tpDMF74TjFGCDACkf1kAQ==", + "version": "12.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks/-/webhooks-12.2.0.tgz", + "integrity": "sha1-6h7i2dnFpLe1P/i8ZKn+sNrJQWE=", "dev": true, "requires": { "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.4.0", "aggregate-error": "^3.1.0" } }, "@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha1-aBpshsmyHU7J4pEI+wU651Er4DM=", "dev": true }, "@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==", + "version": "7.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz", + "integrity": "sha1-ftFcdZCGg6NOAHnIDyYf5Wi4c5U=", "dev": true }, "@pkgjs/parseargs": { @@ -17435,9 +18007,9 @@ } }, "@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==", + "version": "8.10.145", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha1-stMamH9IiOVVP/GBn1fK+kdVlNk=", "dev": true }, "@types/babel__core": { @@ -17482,9 +18054,9 @@ } }, "@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha1-grtqqwCr98/zyiglq+AQwM1TauU=", "dev": true }, "@types/chokidar": { @@ -17611,9 +18183,9 @@ "dev": true }, "@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "version": "9.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha1-5JuWwrKTVu1GLpcI/HO4MwFHJ9I=", "dev": true, "requires": { "@types/node": "*" @@ -18545,7 +19117,7 @@ "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", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -19040,9 +19612,9 @@ "dev": true }, "body-parser": { - "version": "1.20.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha1-GVNDEiHG+1zWPEs21T+rCSjlSMY=", "dev": true, "requires": { "bytes": "3.1.2", @@ -19053,7 +19625,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -19185,7 +19757,7 @@ "btoa-lite": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", "dev": true }, "buffer": { @@ -19243,13 +19815,16 @@ "dev": true }, "call-bind": { - "version": "1.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha1-BgFlmcQMVkmMGHadJzC+JCtvo7k=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -19408,7 +19983,7 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", "dev": true }, "cliui": { @@ -19725,6 +20300,17 @@ "integrity": "sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==", "dev": true }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha1-iU3BQbt9MGCuQ2b2oBB+aPvkjF4=", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -20030,6 +20616,21 @@ "which-typed-array": "^1.1.9" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha1-x/rvvf+LJpbPX0aSHt+3fMS6OEU=", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "dev": true + }, "es-module-lexer": { "version": "1.5.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -20430,9 +21031,9 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", + "integrity": "sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ=", "dev": true } } @@ -21162,9 +21763,9 @@ } }, "function-bind": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", "dev": true }, "function.prototype.name": { @@ -21198,15 +21799,16 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha1-44X1pLUifUScPqu60FSU7wq76t0=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -21532,12 +22134,12 @@ "dev": true }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha1-lj7X0HHce/XwhMW/vg0bYiJYaFQ=", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-proto": { @@ -21561,6 +22163,15 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/he/-/he-1.2.0.tgz", @@ -23566,15 +24177,21 @@ } }, "jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "version": "9.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", "dev": true, "requires": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "dependencies": { "ms": { @@ -23781,12 +24398,42 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -23799,6 +24446,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, "lodash.union": { "version": "4.6.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lodash.union/-/lodash.union-4.6.0.tgz", @@ -23909,9 +24562,9 @@ "dev": true }, "micromatch": { - "version": "4.0.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha1-M+gZDZ/kdKmJVSX1YY7uE21GwuU=", + "version": "4.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=", "dev": true, "requires": { "braces": "^3.0.3", @@ -24318,9 +24971,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha1-3qAIhGf7mR5nr0BYFHokgkowQ/8=", "dev": true }, "object-keys": { @@ -24374,21 +25027,56 @@ } }, "octokit": { - "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.1.0.tgz", - "integrity": "sha512-dmIH5D+edpb4/ASd6ZGo6BiRR1g4ytu8lG4f+6XN/2AW+CSuTsT0nj1d6rv/HKgoflMQ1+rb3KlVWcvrmgQZhw==", + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/octokit/-/octokit-3.2.1.tgz", + "integrity": "sha1-03bKOxKmHFjaAqk8SR0uYnBpsZQ=", "dev": true, "requires": { - "@octokit/app": "^14.0.0", + "@octokit/app": "^14.0.2", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-rest-endpoint-methods": "^9.0.0", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-rest-endpoint-methods": "13.2.2", "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", + "@octokit/plugin-throttling": "^8.0.0", "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0" + "@octokit/types": "^13.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha1-dap9zUQIIdmd72pgtfAUIHrklo4=", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "11.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha1-/pLQS0nxNBZdb7txbnZcLzE602Q=", + "dev": true, + "requires": { + "@octokit/types": "^13.5.0" + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha1-r45d0s3f6ldvkv+vnLhGWfMCpjg=", + "dev": true, + "requires": { + "@octokit/types": "^13.5.0" + } + }, + "@octokit/types": { + "version": "13.5.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@octokit/types/-/types-13.5.1.tgz", + "integrity": "sha1-VoWpHylRld3/85cjsJOw35YJzm4=", + "dev": true, + "requires": { + "@octokit/openapi-types": "^22.2.0" + } + } } }, "on-finished": { @@ -24889,12 +25577,12 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.13.0.tgz", + "integrity": "sha1-bKO9WEOffiRWVXmJl3h7DYilGQY=", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "queue-microtask": { @@ -25283,6 +25971,20 @@ "randombytes": "^2.1.0" } }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha1-qscjFBmOrtl1z3eyw7a4gGleVEk=", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/setimmediate/-/setimmediate-1.0.5.tgz", @@ -25318,14 +26020,15 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "side-channel": { - "version": "1.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha1-q9Jft80kuvRUZkBrEJa3gxySFfI=", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -26105,13 +26808,13 @@ "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", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz", + "integrity": "sha1-jBhno5TX2dQs2jTxHRvLAjeX2N8=", "dev": true, "requires": { "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" + "jsonwebtoken": "^9.0.2" } }, "universal-user-agent": { From 1b1824c970cefd564dc993c7fd3b143ce294ab27 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 27 Sep 2024 13:37:23 -0400 Subject: [PATCH 099/100] Update CHANGELOG.md --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d83abdc50..0458de546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,11 +3,8 @@ - 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 -* Bumped xamltools to 17.12.35326.17 (PR: [#7610](https://github.com/dotnet/vscode-csharp/pull/7610)) - # 2.50.x -* Bumped xamltools to 17.12.35324.244 (PR: [#7600](https://github.com/dotnet/vscode-csharp/pull/7600)) +* Bumped xamltools to 17.12.35326.17 (PR: [#7610](https://github.com/dotnet/vscode-csharp/pull/7610)) # 2.49.x * Update Razor to 9.0.0-preview.24467.1 From 7208d91a7f1eeedaa14254b49efdc1e365cd9614 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 27 Sep 2024 15:19:05 -0700 Subject: [PATCH 100/100] Update Roslyn to 4.13.0-1.24477.2 --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0458de546..88db18f42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,14 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.50.x +* Update Roslyn to 4.13.0-1.24477.2 (PR: [#<>](https://github.com/dotnet/vscode-csharp/pull/<>)) + * Use MSBuild globs to determine which file changes are relevant (PR: [#75139](https://github.com/dotnet/roslyn/pull/75139)) + * Allow in DocComments to render as a block in Hover response (PR: [#75215](https://github.com/dotnet/roslyn/pull/75215)) + * Ignore irrelevant exceptions when reporting LSP server NFW (PR: [#75150](https://github.com/dotnet/roslyn/pull/75150)) * Bumped xamltools to 17.12.35326.17 (PR: [#7610](https://github.com/dotnet/vscode-csharp/pull/7610)) +* Do not remove documents if they are not files (PR: [#7607](https://github.com/dotnet/vscode-csharp/pull/7607)) +* Support copilot registerRelatedFilesProvider API (PR: [#7605](https://github.com/dotnet/vscode-csharp/pull/7605)) +* Update Debugger packages to v2.50.0 (PR: [#7597](https://github.com/dotnet/vscode-csharp/pull/7597)) # 2.49.x * Update Razor to 9.0.0-preview.24467.1 diff --git a/package.json b/package.json index 041cf1aa9..090a2cbcc 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ } }, "defaults": { - "roslyn": "4.12.0-3.24470.4", + "roslyn": "4.13.0-1.24477.2", "omniSharp": "1.39.11", "razor": "9.0.0-preview.24467.1", "razorOmnisharp": "7.0.0-preview.23363.1",