From 19a8b227d1a36aebb1f67a30be1c6e8aa4c117e1 Mon Sep 17 00:00:00 2001 From: siramvikram Date: Wed, 24 Sep 2025 19:54:34 +0000 Subject: [PATCH 001/105] Update main version --- CHANGELOG.md | 2 ++ version.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acc84ab2e2..a64b036b5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +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) +# 2.94.x + # 2.93.x * Bump Roslyn to 5.0.0-2.25472.11 (PR: [#8646](https://github.com/dotnet/vscode-csharp/pull/8646)) * Fix handling edits in types nested in reloadable types(PR: [#80360](https://github.com/dotnet/roslyn/pull/80360)) diff --git a/version.json b/version.json index 5e65a4288e..7a429fa0e4 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.93", + "version": "2.94", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From bed5320dceab38555db8b4b2e1685ae1f0df37ae Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Thu, 25 Sep 2025 21:35:12 +0000 Subject: [PATCH 002/105] Update RoslynCopilot version to 18.0.797-alpha --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1228213b7d..aed60b7d39 100644 --- a/package.json +++ b/package.json @@ -405,7 +405,7 @@ { "id": "RoslynCopilot", "description": "Language server for Roslyn Copilot integration", - "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.743-alpha.zip", + "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.797-alpha.zip", "installPath": ".roslynCopilot", "platforms": [ "neutral" @@ -414,7 +414,7 @@ "neutral" ], "installTestPath": "./.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll", - "integrity": "94F87755F5AA90B578E06A8C91DFAA0F99BBE58B147A53BA8C53CEFA07374583" + "integrity": "168DC3B3757B5F58DD35E27820949CA8AF4B890BE92D1A0CA6461A3A62E9D0A4" }, { "id": "Debugger", @@ -5632,4 +5632,4 @@ } } } -} +} \ No newline at end of file From 2c07c934a2f7a7467590c961f588677d1258f90a Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 25 Sep 2025 15:11:15 -0700 Subject: [PATCH 003/105] Update third party notices for currently shipped version --- ThirdPartyNotices.txt | 5614 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 5530 insertions(+), 84 deletions(-) diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt index f4d3c8d54b..21c2af5bf5 100644 --- a/ThirdPartyNotices.txt +++ b/ThirdPartyNotices.txt @@ -1,20 +1,24 @@ -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +NOTICES AND INFORMATION Do Not Translate or Localize -This project incorporates material from the project(s) listed below (collectively, “Third Party Code”). -Microsoft is not the original author of the Third Party Code. The original copyright notice and license -under which Microsoft received such Third Party Code are set out below. This Third Party Code is licensed -to you under their original license terms set forth below. Microsoft reserves all other rights not -expressly granted, whether by implication, estoppel or otherwise. +This software incorporates material from third parties. +Microsoft makes certain open source code available at https://3rdpartysource.microsoft.com, +or you may send a check or money order for US $5.00, including the product name, +the open source component name, platform, and version number, to: -1. omnisharp-roslyn version 1.0.0 (https://github.com/OmniSharp/omnisharp-roslyn) -2. ScriptCS (https://github.com/scriptcs/scriptcs) -3. run-in-terminal version 0.0.2 (https://github.com/microsoft/run-in-terminal) -4. semver version 5.1.0 (https://github.com/npm/node-semver) -5. DefinitelyTyped version 0.0.1 (https://github.com/borisyankov/DefinitelyTyped) +Source Code Compliance Team +Microsoft Corporation +One Microsoft Way +Redmond, WA 98052 +USA + +Notwithstanding any other terms, you may reverse engineer this software to the extent +required to debug changes to any libraries licensed under the GNU Lesser General Public License. + +--------------------------------------------------------- + +omnisharp-roslyn 1.0.0 - MIT -%% omnisharp-roslyn NOTICES AND INFORMATION BEGINS HERE -============================================================ Copyright (c) Omnisharp Team All rights reserved. @@ -32,93 +36,5535 @@ THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -============================================================ -END OF omnisharp-roslyn NOTICES AND INFORMATION -%% scriptcs NOTICES AND INFORMATION BEGINS HERE -============================================================ -Copyright 2013 Glenn Block, Justin Rusbatch, Filip Wojcieszyn +--------------------------------------------------------- -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file -except in compliance with the License. You may obtain a copy of the License at +--------------------------------------------------------- -http://www.apache.org/licenses/LICENSE-2.0 +tslib 1.13.0 - 0BSD +https://www.typescriptlang.org/ -Unless required by applicable law or agreed to in writing, software distributed under the -License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -either express or implied. See the License for the specific language governing permissions -and limitations under the License. -============================================================ -END OF scriptcs NOTICES AND INFORMATION +Copyright (c) Microsoft Corporation -%% run-in-terminal NOTICES AND INFORMATION BEGINS HERE -============================================================ -The MIT License (MIT) +Copyright (c) Microsoft Corporation. -Copyright (c) 2015 Microsoft Corporation +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +--------------------------------------------------------- -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -============================================================ -END OF run-in-terminal NOTICES AND INFORMATION +--------------------------------------------------------- -%% semver NOTICES AND INFORMATION BEGINS HERE -============================================================ -The ISC License +tslib 2.5.0 - 0BSD +https://www.typescriptlang.org/ -Copyright (c) Isaac Z. Schlueter and Contributors +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. +purpose with or without fee is hereby granted. -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -============================================================ -END OF semver NOTICES AND INFORMATION +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +--------------------------------------------------------- -%% DefinitelyTyped NOTICES AND INFORMATION BEGINS HERE -============================================================ -This project is licensed under the MIT license. -Copyrights are respective of each contributor listed at the beginning of each definition file. +--------------------------------------------------------- -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +before-after-hook 2.2.3 - Apache-2.0 +https://github.com/gr2m/before-after-hook#readme -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +Copyright 2018 Gregor Martynus and other contributors -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -============================================================ -END OF DefinitelyTyped NOTICES AND INFORMATION + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Gregor Martynus and other contributors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +human-signals 1.1.1 - Apache-2.0 +https://git.io/JeluP + +Copyright 2019 ehmicky + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 ehmicky + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +human-signals 2.1.0 - Apache-2.0 +https://git.io/JeluP + +Copyright 2019 ehmicky + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 ehmicky + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +rxjs 6.6.7 - Apache-2.0 +https://github.com/ReactiveX/RxJS + +(c) Sa (c) +Copyright Google Inc. +Copyright (c) Microsoft Corporation +Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +--------------------------------------------------------- + +--------------------------------------------------------- + +ieee754 1.2.1 - BSD-3-Clause +https://github.com/feross/ieee754#readme + +Copyright 2008 Fair Oaks Labs, Inc. +Copyright (c) 2008, Fair Oaks Labs, Inc. + +Copyright 2008 Fair Oaks Labs, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +string-hash 1.1.3 - CC0-1.0 +https://github.com/darkskyapp/string-hash#readme + + +Creative Commons Legal Code + +CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. + + 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + + iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of data in a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and + + vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. + + 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. + + 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. + + 4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. + + b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. + +--------------------------------------------------------- + +--------------------------------------------------------- + +deprecation 2.3.1 - ISC +https://github.com/gr2m/deprecation#readme + +Copyright (c) Gregor Martynus and contributors + +The ISC License + +Copyright (c) Gregor Martynus and contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +graceful-fs 4.2.11 - ISC +https://github.com/isaacs/node-graceful-fs#readme + +Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors + +The ISC License + +Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +isexe 2.0.0 - ISC +https://github.com/isaacs/isexe#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +lru-cache 6.0.0 - ISC +https://github.com/isaacs/node-lru-cache#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +minimatch 10.0.1 - ISC +https://github.com/isaacs/minimatch#readme + +Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +minimatch 3.0.5 - ISC +https://github.com/isaacs/minimatch#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +once 1.4.0 - ISC +https://github.com/isaacs/once#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +semver 7.5.4 - ISC +https://github.com/npm/node-semver#readme + +Copyright Isaac Z. Schlueter +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +semver 7.7.1 - ISC +https://github.com/npm/node-semver#readme + +Copyright Isaac Z. Schlueter +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +signal-exit 3.0.7 - ISC +https://github.com/tapjs/signal-exit + +Copyright (c) 2015, Contributors + +The ISC License + +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +strict-event-emitter-types 2.0.0 - ISC +https://github.com/bterlson/typed-event-emitter#readme + + +ISC License + +Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") + +Copyright (c) 1995-2003 by Internet Software Consortium + +Permission to use, copy, modify, and /or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +universal-user-agent 6.0.0 - ISC +https://github.com/gr2m/universal-user-agent#readme + +Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m) + +# [ISC License](https://spdx.org/licenses/ISC) + +Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m) + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +which 1.3.1 - ISC +https://github.com/isaacs/node-which#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +which 2.0.2 - ISC +https://github.com/isaacs/node-which#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +wrappy 1.0.2 - ISC +https://github.com/npm/wrappy + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +yallist 4.0.0 - ISC +https://github.com/isaacs/yallist#readme + +Copyright (c) Isaac Z. Schlueter and Contributors + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@github/copilot-language-server 1.290.0 - LicenseRef-scancode-unknown +https://github.com/github/copilot-language-server-release + +Copyright Deno authors +(c) 2012 by Cedric Mesnil +Copyright (c) 2018 Agoric +Copyright Domenic Denicola +Copyright (c) 2011 Google Inc. +Copyright (c) 2012 Google Inc. +Copyright 1995-2022 Mark Adler +Copyright 1995-2023 Mark Adler +Copyright Node.js contributors +Copyright (c) 2016, Contributors +Copyright (c) 2014, StrongLoop Inc. +Copyright 2009 the V8 project authors +Copyright 2011 the V8 project authors +Copyright 2012 the V8 project authors +Copyright 2013 the V8 project authors +Copyright 2017 the V8 project authors +Copyright (c) Microsoft and contributors +Copyright (c) 2016 Unicode, Inc. and others +Copyright (c) 2012-2018 by various contributors +Copyright (c) 2009 Thomas Robinson <280north.com> +Copyright Joyent, Inc. and other Node contributors +Copyright 1995-2022 Jean-loup Gailly and Mark Adler +Copyright 1995-2023 Jean-loup Gailly and Mark Adler +Copyright (c) 1996-2016 Free Software Foundation, Inc. +Copyright (c) NevWare21 Solutions LLC and contributors +Copyright 1995-2023 Jean-loup Gailly and Mark Adler Qkkbal +Copyright (c) Sindre Sorhus (sindresorhus.com) + +LicenseRef-scancode-unknown + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/1ds-core-js 4.0.4 - MIT +https://github.com/microsoft/ApplicationInsights-JS#readme + +copyright Microsoft 2018 +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/1ds-post-js 4.0.4 - MIT +https://github.com/microsoft/ApplicationInsights-JS#readme + +copyright Microsoft 2018 +copyright Microsoft 2020 +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +copyright Microsoft 2018-2020 +copyright Microsoft 2022 Simple +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/applicationinsights-channel-js 3.0.5 - MIT +https://github.com/microsoft/ApplicationInsights-JS#readme + +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/applicationinsights-common 3.0.5 - MIT +https://github.com/microsoft/ApplicationInsights-JS#readme + +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/applicationinsights-core-js 3.0.5 - MIT +https://github.com/microsoft/ApplicationInsights-JS#readme + +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/applicationinsights-shims 3.0.1 - MIT +https://github.com/microsoft/ApplicationInsights-JS/tree/main/tools/shims + +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/applicationinsights-web-basic 3.0.5 - MIT +https://github.com/microsoft/ApplicationInsights-JS#readme + +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/dynamicproto-js 2.0.2 - MIT +https://github.com/microsoft/DynamicProto-JS#readme + +Copyright (c) 2022 Nevware21 +Copyright (c) Microsoft Corporation +Copyright (c) Microsoft and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@nevware21/ts-async 0.3.0 - MIT +https://github.com/nevware21/ts-async + +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) NevWare21 and contributors + +MIT License + +Copyright (c) 2022 Nevware21 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@nevware21/ts-utils 0.10.1 - MIT +https://github.com/nevware21/ts-utils + +Copyright (c) 2022 NevWare21 +Copyright (c) 2022 Nevware21 +Copyright (c) 2023 Nevware21 +Copyright (c) NevWare21 and contributors + +MIT License + +Copyright (c) 2022 NevWare21 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/auth-token 4.0.0 - MIT +https://github.com/octokit/auth-token.js#readme + +Copyright (c) 2019 Octokit + +The MIT License + +Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/core 5.2.2 - MIT +https://github.com/octokit/core.js#readme + +Copyright (c) 2019 Octokit contributors + +The MIT License + +Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/endpoint 9.0.6 - MIT +https://github.com/octokit/endpoint.js#readme + +Copyright (c) 2018 Octokit contributors + +The MIT License + +Copyright (c) 2018 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/graphql 7.1.1 - MIT +https://github.com/octokit/graphql.js#readme + +Copyright (c) 2018 Octokit contributors + +The MIT License + +Copyright (c) 2018 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/openapi-types 18.0.0 - MIT +https://github.com/octokit/openapi-types.ts#readme + +Copyright 2020 Gregor Martynus + +Copyright 2020 Gregor Martynus + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/openapi-types 20.0.0 - MIT +https://github.com/octokit/openapi-types.ts#readme + +Copyright 2020 Gregor Martynus + +Copyright 2020 Gregor Martynus + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/openapi-types 22.2.0 - MIT +https://github.com/octokit/openapi-types.ts#readme + +Copyright 2020 Gregor Martynus + +Copyright 2020 Gregor Martynus + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/openapi-types 24.2.0 - MIT +https://github.com/octokit/openapi-types.ts#readme + +Copyright (c) 1985 GitHub.com +Copyright 2020 Gregor Martynus + +Copyright 2020 Gregor Martynus + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/plugin-paginate-rest 11.4.4-cjs.2 - MIT +https://github.com/octokit/plugin-paginate-rest.js#readme + + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/plugin-paginate-rest 9.2.2 - MIT +https://github.com/octokit/plugin-paginate-rest.js#readme + +Copyright (c) 2019 Octokit contributors + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/plugin-request-log 4.0.0 - MIT +https://github.com/octokit/plugin-request-log.js#readme + +Copyright (c) 2020 Octokit contributors + +MIT License Copyright (c) 2020 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/plugin-rest-endpoint-methods 13.3.2-cjs.1 - MIT +https://github.com/octokit/plugin-rest-endpoint-methods.js#readme + +Copyright (c) 2019 Octokit contributors + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/request 8.4.1 - MIT +https://github.com/octokit/request.js#readme + +Copyright (c) 2018 Octokit contributors + +The MIT License + +Copyright (c) 2018 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/request-error 5.1.1 - MIT +https://github.com/octokit/request-error.js#readme + +Copyright (c) 2019 Octokit contributors + +The MIT License + +Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/rest 20.1.2 - MIT +https://github.com/octokit/rest.js#readme + +Copyright (c) 2017-2018 Octokit contributors +Copyright (c) 2012 Cloud9 IDE, Inc. (Mike de Boer) + +The MIT License + +Copyright (c) 2012 Cloud9 IDE, Inc. (Mike de Boer) +Copyright (c) 2017-2018 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/types 11.1.0 - MIT +https://github.com/octokit/types.ts#readme + +Copyright (c) 2019 Octokit contributors + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/types 12.6.0 - MIT +https://github.com/octokit/types.ts#readme + +Copyright (c) 2019 Octokit + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/types 13.10.0 - MIT +https://github.com/octokit/types.ts#readme + +Copyright (c) 2019 Octokit contributors + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@octokit/types 13.5.1 - MIT +https://github.com/octokit/types.ts#readme + +Copyright (c) 2019 Octokit + +MIT License Copyright (c) 2019 Octokit contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@vscode/debugprotocol 1.56.0 - MIT +https://github.com/microsoft/vscode-debugadapter-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@vscode/extension-telemetry 0.9.0 - MIT +https://github.com/Microsoft/vscode-extension-telemetry#readme + +Copyright (c) Microsoft Corporation + +vscode-extension-telemetry + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +@vscode/js-debug-browsers 1.1.0 - MIT +https://github.com/microsoft/vscode-js-debug-browsers#readme + +Copyright (c) Microsoft Corporation + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@vscode/l10n 0.0.18 - MIT +https://github.com/Microsoft/vscode-l10n#readme + + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +agent-base 7.1.0 - MIT +https://github.com/TooTallNate/proxy-agents#readme + +Copyright (c) 2013 Nathan Rajlich + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +await-semaphore 0.1.3 - MIT +https://github.com/notenoughneon/await-semaphore#readme + +Copyright (c) 2016 Emma Kuo + +The MIT License (MIT) + +Copyright (c) 2016 Emma Kuo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +balanced-match 1.0.0 - MIT +https://github.com/juliangruber/balanced-match + +Copyright (c) 2013 Julian Gruber + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +brace-expansion 1.1.12 - MIT +https://github.com/juliangruber/brace-expansion + +Copyright (c) 2013 Julian Gruber + +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +brace-expansion 2.0.2 - MIT +https://github.com/juliangruber/brace-expansion + +Copyright (c) 2013 Julian Gruber + +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +buffer-crc32 0.2.13 - MIT +https://github.com/brianloveswords/buffer-crc32 + +Copyright (c) 2013 Brian J. Brennan + +The MIT License + +Copyright (c) 2013 Brian J. Brennan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +camel-case 4.1.2 - MIT +https://github.com/blakeembrey/change-case/tree/master/packages/camel-case#readme + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +cancellationtoken 2.2.0 - MIT +https://github.com/conradreuter/cancellationtoken#readme + +Copyright (c) 2017 Conrad Reuter + +MIT License + +Copyright (c) 2017 Conrad Reuter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +caught 0.1.3 - MIT +https://github.com/rsp/node-caught#readme + +Copyright (c) 2016 Rafal Pocztarski + +Copyright (c) 2016 Rafał Pocztarski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +concat-map 0.0.1 - MIT +https://github.com/substack/node-concat-map + + +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +cross-spawn 7.0.6 - MIT +https://github.com/moxystudio/node-cross-spawn + +Copyright (c) 2018 Made With MOXY Lda + +The MIT License (MIT) + +Copyright (c) 2018 Made With MOXY Lda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +debug 4.3.7 - MIT +https://github.com/debug-js/debug#readme + +Copyright (c) 2018-2021 Josh Junon +Copyright (c) 2014-2017 TJ Holowaychuk + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk +Copyright (c) 2018-2021 Josh Junon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +--------------------------------------------------------- + +--------------------------------------------------------- + +end-of-stream 1.4.4 - MIT +https://github.com/mafintosh/end-of-stream + +Copyright (c) 2014 Mathias Buus + +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +event-lite 0.1.3 - MIT +https://github.com/kawanet/event-lite + +copyright Yusuke Kawasaki +Copyright (c) 2015-2023 Yusuke Kawasaki + +The MIT License (MIT) + +Copyright (c) 2015-2023 Yusuke Kawasaki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +--------------------------------------------------------- + +--------------------------------------------------------- + +execa 4.0.0 - MIT +https://github.com/sindresorhus/execa#readme + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +execa 4.1.0 - MIT +https://github.com/sindresorhus/execa#readme + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +fd-slicer 1.1.0 - MIT +https://github.com/andrewrk/node-fd-slicer#readme + +Copyright (c) 2014 Andrew Kelley + +Copyright (c) 2014 Andrew Kelley + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +fs-extra 11.3.0 - MIT +https://github.com/jprichardson/node-fs-extra + +Copyright (c) 2011-2024 JP Richardson +Copyright (c) 2011-2024 JP Richardson (https://github.com/jprichardson) +Copyright (c) Sindre Sorhus (sindresorhus.com) +Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors + +(The MIT License) + +Copyright (c) 2011-2024 JP Richardson + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files +(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, + merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +get-stream 5.2.0 - MIT +https://github.com/sindresorhus/get-stream#readme + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +http-proxy-agent 7.0.0 - MIT +https://github.com/TooTallNate/proxy-agents#readme + +Copyright (c) 2013 Nathan Rajlich + +License +------- + +(The MIT License) + +Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +https-proxy-agent 7.0.2 - MIT +https://github.com/TooTallNate/proxy-agents#readme + +Copyright (c) 2013 Nathan Rajlich + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +immutable 4.3.0 - MIT +https://immutable-js.com/ + +Copyright (c) 2014-present, Lee Byron and other contributors + +MIT License + +Copyright (c) 2014-present, Lee Byron and other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +int64-buffer 0.1.10 - MIT +https://github.com/kawanet/int64-buffer + +Copyright (c) 2015-2016 Yusuke Kawasaki +Copyright (c) 2015-2017 Yusuke Kawasaki + +The MIT License (MIT) + +Copyright (c) 2015-2016 Yusuke Kawasaki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +--------------------------------------------------------- + +--------------------------------------------------------- + +isarray 1.0.0 - MIT +https://github.com/juliangruber/isarray + +Copyright (c) 2013 Julian Gruber + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +is-stream 2.0.1 - MIT +https://github.com/sindresorhus/is-stream#readme + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +jsonc-parser 3.0.0 - MIT +https://github.com/microsoft/node-jsonc-parser#readme + +Copyright (c) Microsoft +Copyright 2018, Microsoft +Copyright (c) Microsoft Corporation + +The MIT License (MIT) + +Copyright (c) Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +jsonfile 6.1.0 - MIT +https://github.com/jprichardson/node-jsonfile#readme + +Copyright 2012-2016, JP Richardson +Copyright (c) 2012-2015, JP Richardson + +(The MIT License) + +Copyright (c) 2012-2015, JP Richardson + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files +(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, + merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +lower-case 2.0.2 - MIT +https://github.com/blakeembrey/change-case/tree/master/packages/lower-case#readme + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +merge-stream 2.0.0 - MIT +https://github.com/grncdr/merge-stream#readme + +Copyright (c) Stephen Sugden (stephensugden.com) + +The MIT License (MIT) + +Copyright (c) Stephen Sugden (stephensugden.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +mimic-fn 2.1.0 - MIT +https://github.com/sindresorhus/mimic-fn#readme + +(c) Sindre Sorhus (https://sindresorhus.com) +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +ms 2.0.0 - MIT +https://github.com/zeit/ms#readme + +Copyright (c) 2016 Zeit, Inc. + +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +ms 2.1.3 - MIT +https://github.com/vercel/ms#readme + +Copyright (c) 2020 Vercel, Inc. + +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +msgpack-lite 0.1.26 - MIT +https://github.com/kawanet/msgpack-lite + +Copyright (c) 2015 Yusuke Kawasaki +Copyright (c) 2015-2016 Yusuke Kawasaki + +The MIT License (MIT) + +Copyright (c) 2015 Yusuke Kawasaki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +--------------------------------------------------------- + +--------------------------------------------------------- + +nerdbank-gitversioning 3.6.79-alpha - MIT +https://github.com/dotnet/Nerdbank.GitVersioning + +Copyright 1995-2017 Mark Adler +Copyright James Newton-King 2008 +Copyright LibGit2Sharp contributors +Copyright James Newton-King 2008 Json.NET +Copyright 1995-2017 Mark Adler +3 CScs DEFG +Copyright (c) .NET Foundation and Contributors +Copyright 1995-2017 Jean-loup Gailly and Mark Adler + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +nerdbank-streams 2.10.37-alpha - MIT +https://github.com/AArnott/Nerdbank.Streams + + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +no-case 3.0.4 - MIT +https://github.com/blakeembrey/change-case/tree/master/packages/no-case#readme + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +node-machine-id 1.1.12 - MIT +https://github.com/automation-stack/node-machine-id#readme + +Copyright (c) 2016 Aleksandr Komlev + +The MIT License (MIT) + +Copyright (c) 2016 Aleksandr Komlev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +npm-run-path 4.0.1 - MIT +https://github.com/sindresorhus/npm-run-path#readme + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +onetime 5.1.2 - MIT +https://github.com/sindresorhus/onetime#readme + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +pascal-case 3.1.2 - MIT +https://github.com/blakeembrey/change-case/tree/master/packages/pascal-case#readme + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +path-key 3.1.1 - MIT +https://github.com/sindresorhus/path-key#readme + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +pend 1.2.0 - MIT + + +Copyright (c) 2014 Andrew Kelley + +The MIT License (Expat) + +Copyright (c) 2014 Andrew Kelley + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +ps-list 7.2.0 - MIT +https://github.com/sindresorhus/ps-list#readme + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +pump 3.0.0 - MIT +https://github.com/mafintosh/pump#readme + +Copyright (c) 2014 Mathias Buus + +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +shebang-command 2.0.0 - MIT +https://github.com/kevva/shebang-command#readme + +Copyright (c) Kevin Martensson + +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +shebang-regex 3.0.0 - MIT +https://github.com/sindresorhus/shebang-regex#readme + +(c) Sindre Sorhus (https://sindresorhus.com) +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +strip-final-newline 2.0.0 - MIT +https://github.com/sindresorhus/strip-final-newline#readme + +(c) Sindre Sorhus (https://sindresorhus.com) +Copyright (c) Sindre Sorhus (sindresorhus.com) + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +universalify 2.0.0 - MIT +https://github.com/RyanZim/universalify#readme + +Copyright (c) 2017, Ryan Zimmerman + +(The MIT License) + +Copyright (c) 2017, Ryan Zimmerman + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the 'Software'), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +uuid 9.0.0 - MIT +https://github.com/uuidjs/uuid#readme + +Copyright 2011, Sebastian Tschan https://blueimp.net +Copyright (c) 2010-2020 Robert Kieffer and other contributors +Copyright (c) Paul Johnston 1999 - 2009 Other contributors Greg Holt, Andrew Kepert, Ydnar, Lostinet + +The MIT License (MIT) + +Copyright (c) 2010-2020 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-html-languageservice 5.3.1 - MIT +https://github.com/Microsoft/vscode-html-languageservice#readme + +Copyright (c) Microsoft +Copyright 2016-2023, Microsoft +Copyright (c) Microsoft Corporation +Copyright (c) 2015 W3C(r) MIT, ERCIM, Keio +Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors +Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors + +The MIT License (MIT) + +Copyright (c) Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-jsonrpc 8.0.2 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-jsonrpc 8.1.0 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-jsonrpc 8.2.0 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-jsonrpc 9.0.0-next.8 - MIT + + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-protocol 3.17.2 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation +Copyright (c) TypeFox, Microsoft and others + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-protocol 3.17.5 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation +Copyright (c) TypeFox, Microsoft and others + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-protocol 3.17.6-next.13 - MIT + + +Copyright (c) Microsoft Corporation +Copyright (c) TypeFox, Microsoft and others + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-textdocument 1.0.12 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-types 3.17.2 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-types 3.17.5 - MIT +https://github.com/Microsoft/vscode-languageserver-node#readme + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-languageserver-types 3.17.6-next.6 - MIT + + +Copyright (c) Microsoft Corporation + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-nls 5.0.1 - MIT +https://github.com/Microsoft/vscode-nls#readme + +Copyright (c) Microsoft Corporation + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT +OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +vscode-uri 3.1.0 - MIT +https://github.com/microsoft/vscode-uri#readme + +Copyright (c) Microsoft +Copyright (c) Microsoft Corporation +Copyright Joyent, Inc. and other Node contributors + +The MIT License (MIT) + +Copyright (c) Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +yauzl 2.10.0 - MIT +https://github.com/thejoshwolfe/yauzl + +Copyright (c) 2014 Josh Wolfe + +The MIT License (MIT) + +Copyright (c) 2014 Josh Wolfe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +@microsoft/servicehub-framework 4.2.99-beta +https://github.com/microsoft/vs-servicehub#readme + +copyright Yusuke Kawasaki +Copyright (c) 2016 Emma Kuo +Copyright (c) 2017 Conrad Reuter +Copyright (c) 2015 Yusuke Kawasaki +Copyright (c) 2016 Rafal Pocztarski +Copyright (c) Microsoft Corporation +Copyright 2008 Fair Oaks Labs, Inc. +Copyright (c) 2015-2016 Yusuke Kawasaki +Copyright (c) 2015-2017 Yusuke Kawasaki +Copyright (c) 2015-2018 Yusuke Kawasaki +Copyright (c) 2008, Fair Oaks Labs, Inc. +Copyright (c) 1995-2003 by Internet Software Consortium +Copyright (c) 2013 Julian Gruber +Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. + +MICROSOFT SOFTWARE LICENSE TERMS + +MICROSOFT VISUAL STUDIO ADD-ONs and EXTENSIONS + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. + +1. INSTALLATION AND USE RIGHTS. + You may install and use any number of copies of the software on your devices. + +2. THIRD PARTY COMPONENTS. The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. DATA. + a. Data Collection. The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications and you should provide a copy of Microsoft’s privacy statement to your users. The Microsoft privacy statement is located here https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + b. Processing of Personal Data. To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +4. SCOPE OF LICENSE. The software is licensed, not sold. These license terms only give you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in these license terms. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. In addition, you may not + • work around any technical limitations in the software; + • reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software except, and only to the extent required by third party licensing terms governing the use of certain open source components that may be included in the software; + • remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + • use the software in any way that is against the law; + • share, publish, rent, or lease the software; or + • provide the software as a stand-alone offering or combine it with any of your applications for others to use, or transfer the software or this agreement to any third party. + +5. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +6. SUPPORT SERVICES. Because this software is “as is”, we may not provide support services for it. + +7. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +8. APPLICABLE LAW. If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +9. CONSUMER RIGHTS; REGIONAL VARIATIONS. These license terms describe certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. You may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + a. Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + b. Canada. You may stop receiving updates on your device by turning off Internet access. If and when you re-connect to the Internet, the software will resume checking for and installing updates. + c. Germany and Austria. + (i) Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. + (ii) Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in the case of death or personal or physical injury, Microsoft is liable according to the statutory law. + Subject to the preceding sentence (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. + +10. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS-IS”. YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +11. LIMITATION ON AND EXCLUSION OF DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +SQLitePCLRaw.bundle_green 2.1.0 - Apache-2.0 + + + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + + + + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + + + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + + + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + + + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + + + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + + + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + + + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + + + + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software + +distributed under the License is distributed on an "AS IS" BASIS, + +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and + +limitations under the License. + +--------------------------------------------------------- + +--------------------------------------------------------- + +SQLitePCLRaw.core 2.1.0 - Apache-2.0 + + +Copyright 2014-2022 SourceGear, LLC +Copyright 2014-2022 SourceGear, LLC SSQLitePCLRaw + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + + + + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + + + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + + + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + + + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + + + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + + + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + + + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + + + + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software + +distributed under the License is distributed on an "AS IS" BASIS, + +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and + +limitations under the License. + +--------------------------------------------------------- + +--------------------------------------------------------- + +SQLitePCLRaw.lib.e_sqlite3 2.1.0 - Apache-2.0 + + + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + + + + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + + + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + + + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + + + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + + + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + + + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + + + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + + + + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software + +distributed under the License is distributed on an "AS IS" BASIS, + +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and + +limitations under the License. + +--------------------------------------------------------- + +--------------------------------------------------------- + +SQLitePCLRaw.provider.dynamic_cdecl 2.1.0 - Apache-2.0 + + +Copyright 2014-2022 SourceGear, LLC +Copyright 2014-2022 SourceGear, LLC SSQLitePCLRaw + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + + + + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + + + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + + + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + + + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + + + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + + + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + + + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + + + + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software + +distributed under the License is distributed on an "AS IS" BASIS, + +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and + +limitations under the License. + +--------------------------------------------------------- + +--------------------------------------------------------- + +SQLitePCLRaw.provider.e_sqlite3 2.1.0 - Apache-2.0 + + +Copyright 2014-2022 SourceGear, LLC +Copyright 2014-2022 SourceGear, LLC SSQLitePCLRaw + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + + + + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + + + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + + + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + + + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + + + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + + + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + + + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + + + + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software + +distributed under the License is distributed on an "AS IS" BASIS, + +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and + +limitations under the License. + +--------------------------------------------------------- + +--------------------------------------------------------- + +Humanizer.Core 2.14.1 - MIT + + +Copyright .NET Foundation and Contributors +Copyright (c) .NET Foundation and Contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +ICSharpCode.Decompiler 9.1.0.7988 - MIT + + +Copyright 2011-2025 AlphaSierraPapa C Decompiler +Copyright 2011-2025 AlphaSierraPapa ICSharpCode.Decompiler +Copyright 2011-2025 AlphaSierraPapa LegalTrademarks OriginalFilename + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +MessagePack 2.5.198 - MIT + + +(c) Yoshifumi Kawai and contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +MessagePack.Annotations 2.5.198 - MIT + + +(c) Yoshifumi Kawai and contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +Nerdbank.Streams 2.12.87 - MIT + + +(c) Andrew Arnott +Copyright (c) .NET Foundation and Contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +Newtonsoft.Json 13.0.1 - MIT + + +Copyright James Newton-King 2008 +Copyright (c) 2007 James Newton-King +Copyright (c) James Newton-King 2008 +Copyright James Newton-King 2008 Json.NET + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +Newtonsoft.Json 13.0.3 - MIT + + +Copyright James Newton-King 2008 +Copyright (c) 2007 James Newton-King +Copyright (c) James Newton-King 2008 +Copyright James Newton-King 2008 Json.NET + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--------------------------------------------------------- + +--------------------------------------------------------- + +Humanizer.Core 2.2.0 - MIT + + +Copyright 2012-2016 +Copyright 2012-2017 Mehdi Khalili + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +MessagePack 2.5.108 - MIT + + +(c) Yoshifumi Kawai and contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +MessagePack 2.5.187 - MIT + + +(c) Yoshifumi Kawai and contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +MessagePack.Annotations 2.5.108 - MIT + + +(c) Yoshifumi Kawai and contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +MessagePack.Annotations 2.5.187 - MIT + + +(c) Yoshifumi Kawai and contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- + +--------------------------------------------------------- + +Nerdbank.Streams 2.10.69 - MIT + + +(c) Andrew Arnott +Copyright (c) .NET Foundation and Contributors + +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--------------------------------------------------------- From 85ac04793709c3a990f6082ed252308fd75d6db3 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 25 Sep 2025 16:13:01 -0700 Subject: [PATCH 004/105] Update pipeline and packaging excludes --- .vscodeignore | 9 ++------- azure-pipelines.yml | 2 ++ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.vscodeignore b/.vscodeignore index c7b2803542..49baab255e 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -8,7 +8,7 @@ !.razorDevKit/** !.razoromnisharp/** !.razorExtension/** -.rpt2_cache/** +.azuredevops/** .config/** .devcontainer/** .github/** @@ -22,8 +22,7 @@ src/** tasks/** test/** __mocks__/** -jest.config.ts -baseJestConfig.ts +**/*.ts .prettierignore typings/** vsix/** @@ -40,17 +39,13 @@ CODEOWNERS Directory.Build.props global.json NuGet.config -gulpfile.ts !install.Lock -ISSUE_TEMPLATE !README.md !CHANGELOG.md *.md -CONTRIBUTING.md *.vscodeignore *.yml package-lock.json -package.json tsconfig.json version.json wallaby.js diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 187a9c3f28..38b038fef9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -42,6 +42,8 @@ pr: - CODEOWNERS # Changes to the vesion is not a functional change. The extension version is updated by the branch-snap GH action. - 'version.json' + # Changes to text files (e.g. third party notices) are not functional changes. + - '**.txt' # Run a scheduled build every night on main to run tests against insiders VSCode. # The variable testVSCodeVersion is set to insiders based on the build reason. From 0073d71fd1e5b0f6b0931af798a0b156bbb9c765 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 25 Sep 2025 16:32:13 -0700 Subject: [PATCH 005/105] Add copilot setup steps --- .github/workflows/copilot-setup-steps.yml | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/copilot-setup-steps.yml diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 0000000000..26af331d0f --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,45 @@ +# GitHub Copilot setup steps for the C# VS Code extension +# This file configures the environment for the GitHub Copilot coding agent + +name: "Copilot Setup Steps" + +# Automatically run the setup steps when they are changed to allow for easy validation, and +# allow manual testing through the repository's "Actions" tab +on: + workflow_dispatch: + push: + paths: + - .github/workflows/copilot-setup-steps.yml + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + permissions: + contents: read # Read access to the repository contents (required for checkout) + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + # Install Node.js (required for TypeScript compilation and npm packages) + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + # Install .NET SDK (required for some build components and MSBuild tasks) + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + # Install npm dependencies + - name: Install dependencies + run: npm ci + + # Install gulp globally (required for build tasks) + - name: Install gulp + run: npm install -g gulp From 43f9e6679be1ab83df4cea83acc886be30819cfe Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 25 Sep 2025 17:39:48 -0700 Subject: [PATCH 006/105] Do not run legacy Razor tests in CI --- azure-pipelines/test-matrix.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/azure-pipelines/test-matrix.yml b/azure-pipelines/test-matrix.yml index d816d3b4a2..1929d02203 100644 --- a/azure-pipelines/test-matrix.yml +++ b/azure-pipelines/test-matrix.yml @@ -28,9 +28,6 @@ jobs: DevKitTests: npmCommand: test:integration:devkit isIntegration: true - RazorTests: - npmCommand: test:integration:razor - isIntegration: true RazorCohostTests: npmCommand: test:integration:razor:cohost isIntegration: true From 42328d019a5d59c09430e1310d8bde9ca720d500 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 25 Sep 2025 17:56:02 -0700 Subject: [PATCH 007/105] Add additional commands --- .github/workflows/copilot-setup-steps.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 26af331d0f..546d9036ac 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -43,3 +43,13 @@ jobs: # Install gulp globally (required for build tasks) - name: Install gulp run: npm install -g gulp + + # Install vsce (needed for packaging tasks) + - name: Install vsce + run: npm install -g vsce + + # Install server dependencies (needed for integration tests and running) + - name: Install dependencies + run: gulp installDependencies + + From 4a93b55026327a784b8dff99757d2a52c04718ea Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Fri, 26 Sep 2025 01:25:13 +0000 Subject: [PATCH 008/105] Localization result of 386b5b92aa0a815a21323c3ab03fe3f4dc525a58. --- l10n/bundle.l10n.cs.json | 2 +- l10n/bundle.l10n.de.json | 2 +- l10n/bundle.l10n.es.json | 2 +- l10n/bundle.l10n.fr.json | 2 +- l10n/bundle.l10n.it.json | 2 +- l10n/bundle.l10n.ko.json | 2 +- l10n/bundle.l10n.pl.json | 2 +- l10n/bundle.l10n.pt-br.json | 2 +- l10n/bundle.l10n.ru.json | 2 +- l10n/bundle.l10n.tr.json | 2 +- l10n/bundle.l10n.zh-cn.json | 2 +- l10n/bundle.l10n.zh-tw.json | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/l10n/bundle.l10n.cs.json b/l10n/bundle.l10n.cs.json index f06447e934..d8dd8e2830 100644 --- a/l10n/bundle.l10n.cs.json +++ b/l10n/bundle.l10n.cs.json @@ -37,7 +37,7 @@ "Copy Html": "Kopírovat HTML", "Copy issue content again": "Zkopírovat obsah problému znovu", "Could not determine CSharp content": "Nepovedlo se určit obsah CSharp.", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Nepovedlo se určit obsah CSharp: {0}", "Could not determine Html content": "Nepovedlo se určit obsah HTML.", "Could not find '{0}' in or above '{1}'.": "Nepovedlo se najít {0} v {1} ani výše.", "Could not find Razor Language Server executable '{0}' within directory": "V adresáři se nepovedlo najít spustitelný soubor jazykového serveru Razor {0}.", diff --git a/l10n/bundle.l10n.de.json b/l10n/bundle.l10n.de.json index 70b1efce66..9a33242881 100644 --- a/l10n/bundle.l10n.de.json +++ b/l10n/bundle.l10n.de.json @@ -37,7 +37,7 @@ "Copy Html": "HTML kopieren", "Copy issue content again": "Probleminhalt erneut kopieren", "Could not determine CSharp content": "Der CSharp-Inhalt konnte nicht bestimmt werden.", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Der CSharp-Inhalt konnte nicht bestimmt werden: {0}", "Could not determine Html content": "Der HTML-Inhalt konnte nicht bestimmt werden.", "Could not find '{0}' in or above '{1}'.": "\"{0}\" wurde in oder über \"{1}\" nicht gefunden.", "Could not find Razor Language Server executable '{0}' within directory": "Die ausführbare Razor Language Server-Datei „{0}“ wurde im Verzeichnis nicht gefunden.", diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index 718b626fe1..68ddc82b01 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -37,7 +37,7 @@ "Copy Html": "Copiar HTML", "Copy issue content again": "Volver a copiar el contenido del problema", "Could not determine CSharp content": "No se pudo determinar el contenido de CSharp", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "No se pudo determinar el contenido de CSharp: {0}", "Could not determine Html content": "No se pudo determinar el contenido HTML", "Could not find '{0}' in or above '{1}'.": "No se pudo encontrar '{0}' en '' o encima de '{1}'.", "Could not find Razor Language Server executable '{0}' within directory": "No se encontró el ejecutable del servidor de lenguaje Razor en el directorio ''{0}''", diff --git a/l10n/bundle.l10n.fr.json b/l10n/bundle.l10n.fr.json index a91ed1e58b..235564b529 100644 --- a/l10n/bundle.l10n.fr.json +++ b/l10n/bundle.l10n.fr.json @@ -37,7 +37,7 @@ "Copy Html": "Copier du code HTML", "Copy issue content again": "Copier à nouveau le contenu du problème", "Could not determine CSharp content": "Impossible de déterminer le contenu CSharp", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Impossible de déterminer le contenu CSharp : {0}", "Could not determine Html content": "Impossible de déterminer le contenu HTML", "Could not find '{0}' in or above '{1}'.": "Impossible de trouver '{0}' dans ou au-dessus '{1}'.", "Could not find Razor Language Server executable '{0}' within directory": "Impossible de trouver l’exécutable du serveur de langage Razor dans le répertoire « {0} »", diff --git a/l10n/bundle.l10n.it.json b/l10n/bundle.l10n.it.json index 5569246a09..319df8e0b3 100644 --- a/l10n/bundle.l10n.it.json +++ b/l10n/bundle.l10n.it.json @@ -37,7 +37,7 @@ "Copy Html": "Copia HTML", "Copy issue content again": "Copiare di nuovo il contenuto del problema", "Could not determine CSharp content": "Non è stato possibile determinare il contenuto CSharp", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Non è possibile determinare il contenuto CSharp: {0}", "Could not determine Html content": "Non è stato possibile determinare il contenuto HTML", "Could not find '{0}' in or above '{1}'.": "Non è stato possibile trovare '{0}{0}' in o sopra '{1}'.", "Could not find Razor Language Server executable '{0}' within directory": "Non è possibile trovare l'eseguibile del server di linguaggio Razor '{0}' nella directory", diff --git a/l10n/bundle.l10n.ko.json b/l10n/bundle.l10n.ko.json index e76f2164fb..62c077fff9 100644 --- a/l10n/bundle.l10n.ko.json +++ b/l10n/bundle.l10n.ko.json @@ -37,7 +37,7 @@ "Copy Html": "HTML 복사", "Copy issue content again": "문제 내용 다시 복사", "Could not determine CSharp content": "CSharp 콘텐츠를 확인할 수 없음", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "CSharp 콘텐츠를 확인할 수 없음: {0}", "Could not determine Html content": "Html 콘텐츠를 확인할 수 없음", "Could not find '{0}' in or above '{1}'.": "'{1}' 안이나 위에서 '{0}'을(를) 찾을 수 없음.", "Could not find Razor Language Server executable '{0}' within directory": "디렉터리 내에서 '{0}' Razor 언어 서버 실행 파일을 찾을 수 없습니다.", diff --git a/l10n/bundle.l10n.pl.json b/l10n/bundle.l10n.pl.json index 96d3286ef3..d447a8ee9c 100644 --- a/l10n/bundle.l10n.pl.json +++ b/l10n/bundle.l10n.pl.json @@ -37,7 +37,7 @@ "Copy Html": "Kopiuj treść HTML", "Copy issue content again": "Ponownie skopiuj zawartość problemu", "Could not determine CSharp content": "Nie można określić zawartości CSharp", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Nie można określić zawartości CSharp: {0}", "Could not determine Html content": "Nie można określić zawartości HTML", "Could not find '{0}' in or above '{1}'.": "Nie można odnaleźć elementu „{0}” w lub powyżej „{1}”.", "Could not find Razor Language Server executable '{0}' within directory": "Nie można odnaleźć pliku wykonywalnego serwera języka Razor „{0}” w katalogu", diff --git a/l10n/bundle.l10n.pt-br.json b/l10n/bundle.l10n.pt-br.json index 951cf2ec38..55daca2133 100644 --- a/l10n/bundle.l10n.pt-br.json +++ b/l10n/bundle.l10n.pt-br.json @@ -37,7 +37,7 @@ "Copy Html": "Copiar Html", "Copy issue content again": "Copie o conteúdo do problema novamente", "Could not determine CSharp content": "Não foi possível determinar o conteúdo do CSharp", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Não foi possível determinar o conteúdo CSharp: {0}", "Could not determine Html content": "Não foi possível determinar o conteúdo html", "Could not find '{0}' in or above '{1}'.": "Não foi possível encontrar '{0}' dentro ou acima '{1}'.", "Could not find Razor Language Server executable '{0}' within directory": "Não foi possível encontrar o executável do Razor Language Server “{0}” no diretório", diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index e5551880f5..e55383f00f 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -37,7 +37,7 @@ "Copy Html": "Копировать HTML", "Copy issue content again": "Повторно копировать содержимое проблемы", "Could not determine CSharp content": "Не удалось определить содержимое CSharp", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "Не удалось определить содержимое CSharp: {0}", "Could not determine Html content": "Не удалось определить содержимое HTML", "Could not find '{0}' in or above '{1}'.": "Не удалось найти \"{0}\" в \"{1}\" или выше.", "Could not find Razor Language Server executable '{0}' within directory": "Не удалось найти исполняемый файл языкового сервера Razor в каталоге \"{0}\"", diff --git a/l10n/bundle.l10n.tr.json b/l10n/bundle.l10n.tr.json index 5dd5ebf34d..e47c040d22 100644 --- a/l10n/bundle.l10n.tr.json +++ b/l10n/bundle.l10n.tr.json @@ -37,7 +37,7 @@ "Copy Html": "HTML'yi Kopyala", "Copy issue content again": "Sorun içeriğini yeniden kopyala", "Could not determine CSharp content": "CSharp içeriği belirlenemedi", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "CSharp içeriği belirlenemedi: {0}", "Could not determine Html content": "Html içeriği belirlenemedi", "Could not find '{0}' in or above '{1}'.": "'{1}' içinde veya üzerinde '{0}' bulunamadı.", "Could not find Razor Language Server executable '{0}' within directory": "'{0}' Razor Dil Sunucusu yürütülebilir dosyası dizinde bulunamadı", diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json index a590d1a5f7..6053bc2d2c 100644 --- a/l10n/bundle.l10n.zh-cn.json +++ b/l10n/bundle.l10n.zh-cn.json @@ -37,7 +37,7 @@ "Copy Html": "复制 HTML", "Copy issue content again": "再次复制问题内容", "Could not determine CSharp content": "无法确定 CSharp 内容", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "无法确定 CSharp 内容: {0}", "Could not determine Html content": "无法确定 Html 内容", "Could not find '{0}' in or above '{1}'.": "在“{0}”或更高版本中找不到“{1}”。", "Could not find Razor Language Server executable '{0}' within directory": "在目录中找不到 Razor 语言服务器可执行文件“{0}”", diff --git a/l10n/bundle.l10n.zh-tw.json b/l10n/bundle.l10n.zh-tw.json index 2fbf87e63a..0d2f0b960d 100644 --- a/l10n/bundle.l10n.zh-tw.json +++ b/l10n/bundle.l10n.zh-tw.json @@ -37,7 +37,7 @@ "Copy Html": "複製 HTML", "Copy issue content again": "再次複製問題內容", "Could not determine CSharp content": "無法判斷 CSharp 內容", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "無法判斷 CSharp 內容:{0}", "Could not determine Html content": "無法判斷 Html 內容", "Could not find '{0}' in or above '{1}'.": "'{1}' 中或以上找不到 '{0}'。", "Could not find Razor Language Server executable '{0}' within directory": "目錄中找不到 Razor 語言伺服器可執行檔 '{0}'", From db2301baa8dce5a79fdeb09cb57388d2b62fc1c4 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 09:02:58 -0700 Subject: [PATCH 009/105] Adds a new GH action to update the changelog --- .github/workflows/update-changelog.yml | 29 ++++++ tasks/gitTasks.ts | 14 +++ tasks/snapTasks.ts | 135 +++++++++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 .github/workflows/update-changelog.yml diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml new file mode 100644 index 0000000000..6ffc2518a6 --- /dev/null +++ b/.github/workflows/update-changelog.yml @@ -0,0 +1,29 @@ +name: Update CHANGELOG +on: + workflow_dispatch + +permissions: + contents: write + pull-requests: write + +jobs: + update-changelog: + runs-on: ubuntu-latest + steps: + - name: Check out + uses: actions/checkout@v2 + - name: Install NodeJS + uses: actions/setup-node@v4 + with: + node-version: '20.x' + - name: Install dependencies + run: npm ci + - name: Update version.json + run: npx gulp updateChangelog + - name: Create version update PR + uses: peter-evans/create-pull-request@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: Update ${{ github.ref_name }} CHANGELOG + title: '[automated] Update ${{ github.ref_name }} CHANGELOG' + branch: merge/update-${{ github.ref_name }}-changelog diff --git a/tasks/gitTasks.ts b/tasks/gitTasks.ts index 9230729e2e..5f52050639 100644 --- a/tasks/gitTasks.ts +++ b/tasks/gitTasks.ts @@ -5,6 +5,7 @@ import { spawnSync } from 'child_process'; import { Octokit } from '@octokit/rest'; +import { EOL } from 'os'; /** * Execute a git command with optional logging @@ -146,3 +147,16 @@ export async function createPullRequest( return null; } } + +/** + * Find all tags that match the given version pattern + * @param version The `Major.Minor` version pattern to match + * @returns A sorted list of matching tags from oldest to newest + */ +export async function findTagsByVersion(version: string): Promise { + const tagList = await git(['tag', '--list', `v${version}*`, '--sort=creatordate'], false); + return tagList + .split(EOL) + .map((tag) => tag.trim()) + .filter((tag) => tag.length > 0); +} diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index 4579910b18..ff8b4c20e1 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -7,6 +7,18 @@ import * as gulp from 'gulp'; import * as fs from 'fs'; import * as path from 'path'; import * as os from 'os'; +import { exec } from 'child_process'; +import { promisify } from 'util'; +import { findTagsByVersion } from './gitTasks'; + +const execAsync = promisify(exec); + +function logWarning(message: string, error?: unknown): void { + console.log(`##vso[task.logissue type=warning]${message}`); + if (error instanceof Error && error.stack) { + console.log(`##[debug]${error.stack}`); + } +} gulp.task('incrementVersion', async (): Promise => { // Get the current version from version.json @@ -64,3 +76,126 @@ gulp.task('incrementVersion', async (): Promise => { changelogLines.splice(lineToInsertAt, 0, ...linesToInsert); fs.writeFileSync(changelogPath, changelogLines.join(os.EOL)); }); + +gulp.task('updateChangelog', async (): Promise => { + // Add a new changelog section for the new version. + console.log('Adding new prs to changelog'); + + const changelogPath = path.join(path.resolve(__dirname, '..'), 'CHANGELOG.md'); + const changelogContent = fs.readFileSync(changelogPath, 'utf8'); + const changelogLines = changelogContent.split(os.EOL); + + // Find all the headers in the changelog (and their line numbers) + const currentHeaderLine = findNextVersionHeaderLine(changelogLines); + if (currentHeaderLine === -1) { + throw new Error('Could not find the current header in the changelog.'); + } + + const currentVersion = getVersionFromHeader(changelogLines[currentHeaderLine]); + if (!currentVersion) { + throw new Error('Could not determine the current version from the changelog header.'); + } + + console.log(`Adding PRs for ${currentVersion}`); + + const previousHeaderLine = findNextVersionHeaderLine(changelogLines, currentHeaderLine + 1); + if (previousHeaderLine === -1) { + throw new Error('Could not find the previous header before the current version header in the changelog.'); + } + + const previousVersion = getVersionFromHeader(changelogLines[previousHeaderLine]); + if (!previousVersion) { + throw new Error('Could not determine the previous version from the changelog header.'); + } + + const versionTags = await findTagsByVersion(previousVersion!); + if (versionTags.length === 0) { + throw new Error(`Could not find any tags for version ${previousVersion}`); + } + + // The last tag is the most recent one created. + const versionTag = versionTags.pop(); + + console.log(`Using tag ${versionTag} for previous version ${previousVersion}`); + + const presentPrIds = getPrIdsBetweenHeaders(changelogLines, currentHeaderLine, previousHeaderLine); + console.log(`PRs [#${presentPrIds.join(', #')}] already in the changelog.`); + const currentPrs = await generatePRList(versionTag!, 'HEAD'); + + const newPrs = []; + for (const pr of currentPrs) { + const match = prRegex.exec(pr); + if (!match) { + continue; + } + + const prId = match[1]; + if (presentPrIds.includes(prId)) { + console.log(`PR #${prId} is already present in the changelog.`); + continue; + } + + console.log(`Adding new PR to changelog: ${pr}`); + newPrs.push(pr); + } + + changelogLines.splice(currentHeaderLine + 1, 0, ...newPrs); + fs.writeFileSync(changelogPath, changelogLines.join(os.EOL)); +}); + +const prRegex = /^\*.+\(PR: \[#(\d+)\]\(/g; + +function findNextVersionHeaderLine(changelogLines: string[], startLine: number = 0): number { + const headerRegex = /^#\s\d+\.\d+\.(x|\d+)$/gm; + for (let i = startLine; i < changelogLines.length; i++) { + const line = changelogLines.at(i); + const match = headerRegex.exec(line!); + if (match) { + return i; + } + } + return -1; +} + +function getPrIdsBetweenHeaders(changelogLines: string[], startLine: number, endLine: number): string[] { + const prs: string[] = []; + for (let i = startLine; i < endLine; i++) { + const line = changelogLines.at(i); + const match = prRegex.exec(line!); + if (match && match[1]) { + prs.push(match[1]); + } + } + return prs; +} + +function getVersionFromHeader(header: string): string | null { + const versionRegex = /^#+\s+(\d+\.\d+)/; + const match = versionRegex.exec(header); + if (match && match[1]) { + return match[1]; + } + return null; +} + +async function generatePRList(startSHA: string, endSHA: string): Promise { + console.log(`Generating PR list from ${startSHA} to ${endSHA}...`); + + try { + console.log(`Executing: roslyn-tools pr-finder -s "${startSHA}" -e "${endSHA}" --format o#`); + let { stdout } = await execAsync( + `roslyn-tools pr-finder -s "${startSHA}" -e "${endSHA}" --format o#`, + { maxBuffer: 10 * 1024 * 1024 } // 10MB buffer + ); + + stdout = stdout.trim(); + if (stdout.length === 0) { + return []; + } + + return stdout.split(os.EOL).filter((pr) => pr.length > 0); + } catch (error) { + logWarning(`PR finder failed: ${error instanceof Error ? error.message : error}`, error); + return []; + } +} From d6006e5e5bc036fad6d7b57e5b3b4eadc32ed251 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 09:21:10 -0700 Subject: [PATCH 010/105] Simplify --- tasks/snapTasks.ts | 44 ++++++++++++-------------------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index ff8b4c20e1..28ff90b538 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -79,34 +79,27 @@ gulp.task('incrementVersion', async (): Promise => { gulp.task('updateChangelog', async (): Promise => { // Add a new changelog section for the new version. - console.log('Adding new prs to changelog'); + console.log('Determining version from CHANGELOG'); const changelogPath = path.join(path.resolve(__dirname, '..'), 'CHANGELOG.md'); const changelogContent = fs.readFileSync(changelogPath, 'utf8'); const changelogLines = changelogContent.split(os.EOL); // Find all the headers in the changelog (and their line numbers) - const currentHeaderLine = findNextVersionHeaderLine(changelogLines); + const [currentHeaderLine, currentVersion] = findNextVersionHeaderLine(changelogLines); if (currentHeaderLine === -1) { throw new Error('Could not find the current header in the changelog.'); } - const currentVersion = getVersionFromHeader(changelogLines[currentHeaderLine]); - if (!currentVersion) { - throw new Error('Could not determine the current version from the changelog header.'); - } - - console.log(`Adding PRs for ${currentVersion}`); + console.log(`Adding PRs for ${currentVersion} to CHANGELOG`); - const previousHeaderLine = findNextVersionHeaderLine(changelogLines, currentHeaderLine + 1); + const [previousHeaderLine, previousVersion] = findNextVersionHeaderLine(changelogLines, currentHeaderLine + 1); if (previousHeaderLine === -1) { - throw new Error('Could not find the previous header before the current version header in the changelog.'); + throw new Error('Could not find the previous header in the changelog.'); } - const previousVersion = getVersionFromHeader(changelogLines[previousHeaderLine]); - if (!previousVersion) { - throw new Error('Could not determine the previous version from the changelog header.'); - } + const presentPrIds = getPrIdsBetweenHeaders(changelogLines, currentHeaderLine, previousHeaderLine); + console.log(`PRs [#${presentPrIds.join(', #')}] already in the changelog.`); const versionTags = await findTagsByVersion(previousVersion!); if (versionTags.length === 0) { @@ -115,11 +108,9 @@ gulp.task('updateChangelog', async (): Promise => { // The last tag is the most recent one created. const versionTag = versionTags.pop(); - console.log(`Using tag ${versionTag} for previous version ${previousVersion}`); - const presentPrIds = getPrIdsBetweenHeaders(changelogLines, currentHeaderLine, previousHeaderLine); - console.log(`PRs [#${presentPrIds.join(', #')}] already in the changelog.`); + console.log(`Generating PR list from ${versionTag} to HEAD...`); const currentPrs = await generatePRList(versionTag!, 'HEAD'); const newPrs = []; @@ -145,16 +136,16 @@ gulp.task('updateChangelog', async (): Promise => { const prRegex = /^\*.+\(PR: \[#(\d+)\]\(/g; -function findNextVersionHeaderLine(changelogLines: string[], startLine: number = 0): number { - const headerRegex = /^#\s\d+\.\d+\.(x|\d+)$/gm; +function findNextVersionHeaderLine(changelogLines: string[], startLine: number = 0): [number, string] { + const headerRegex = /^#\s(\d+\.\d+)\.(x|\d+)$/gm; for (let i = startLine; i < changelogLines.length; i++) { const line = changelogLines.at(i); const match = headerRegex.exec(line!); if (match) { - return i; + return [i, match[1]]; } } - return -1; + return [-1, '']; } function getPrIdsBetweenHeaders(changelogLines: string[], startLine: number, endLine: number): string[] { @@ -169,18 +160,7 @@ function getPrIdsBetweenHeaders(changelogLines: string[], startLine: number, end return prs; } -function getVersionFromHeader(header: string): string | null { - const versionRegex = /^#+\s+(\d+\.\d+)/; - const match = versionRegex.exec(header); - if (match && match[1]) { - return match[1]; - } - return null; -} - async function generatePRList(startSHA: string, endSHA: string): Promise { - console.log(`Generating PR list from ${startSHA} to ${endSHA}...`); - try { console.log(`Executing: roslyn-tools pr-finder -s "${startSHA}" -e "${endSHA}" --format o#`); let { stdout } = await execAsync( From 6a817fcfcec384b8c058977cbfd372f9ee8c16fd Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 10:22:10 -0700 Subject: [PATCH 011/105] Fix up logging --- tasks/snapTasks.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index 28ff90b538..82a324d623 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -88,18 +88,18 @@ gulp.task('updateChangelog', async (): Promise => { // Find all the headers in the changelog (and their line numbers) const [currentHeaderLine, currentVersion] = findNextVersionHeaderLine(changelogLines); if (currentHeaderLine === -1) { - throw new Error('Could not find the current header in the changelog.'); + throw new Error('Could not find the current header in the CHANGELOG'); } console.log(`Adding PRs for ${currentVersion} to CHANGELOG`); const [previousHeaderLine, previousVersion] = findNextVersionHeaderLine(changelogLines, currentHeaderLine + 1); if (previousHeaderLine === -1) { - throw new Error('Could not find the previous header in the changelog.'); + throw new Error('Could not find the previous header in the CHANGELOG'); } const presentPrIds = getPrIdsBetweenHeaders(changelogLines, currentHeaderLine, previousHeaderLine); - console.log(`PRs [#${presentPrIds.join(', #')}] already in the changelog.`); + console.log(`PRs [#${presentPrIds.join(', #')}] already in the CHANGELOG`); const versionTags = await findTagsByVersion(previousVersion!); if (versionTags.length === 0) { @@ -110,7 +110,7 @@ gulp.task('updateChangelog', async (): Promise => { const versionTag = versionTags.pop(); console.log(`Using tag ${versionTag} for previous version ${previousVersion}`); - console.log(`Generating PR list from ${versionTag} to HEAD...`); + console.log(`Generating PR list from ${versionTag} to HEAD`); const currentPrs = await generatePRList(versionTag!, 'HEAD'); const newPrs = []; @@ -122,14 +122,21 @@ gulp.task('updateChangelog', async (): Promise => { const prId = match[1]; if (presentPrIds.includes(prId)) { - console.log(`PR #${prId} is already present in the changelog.`); + console.log(`PR #${prId} is already present in the CHANGELOG`); continue; } - console.log(`Adding new PR to changelog: ${pr}`); + console.log(`Adding new PR to CHANGELOG: ${pr}`); newPrs.push(pr); } + if (newPrs.length === 0) { + console.log('No new PRs to add to the CHANGELOG'); + return; + } + + console.log(`Writing ${newPrs.length} new PRs to the CHANGELOG`); + changelogLines.splice(currentHeaderLine + 1, 0, ...newPrs); fs.writeFileSync(changelogPath, changelogLines.join(os.EOL)); }); From faecd87cb7327dde5cee811b821db4481d0d3d45 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Fri, 26 Sep 2025 17:57:29 +0000 Subject: [PATCH 012/105] Localization result of 693b45765158dfb0373fe62be4911eea5dbf3224. --- l10n/bundle.l10n.ja.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 3f4457458f..170313b44e 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -37,7 +37,7 @@ "Copy Html": "HTML のコピー", "Copy issue content again": "問題の内容をもう一度コピーする", "Could not determine CSharp content": "CSharp コンテンツを特定できませんでした", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "CSharp コンテンツを特定できませんでした: {0}", "Could not determine Html content": "HTML コンテンツを特定できませんでした", "Could not find '{0}' in or above '{1}'.": "'{1}' 以上に '{0}' が見つかりませんでした。", "Could not find Razor Language Server executable '{0}' within directory": "ディレクトリ内に Razor 言語サーバーの実行可能ファイル '{0}' が見つかりませんでした", From 97605c0589f6c391139e72282779cdcdfcc25140 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 11:00:24 -0700 Subject: [PATCH 013/105] Add schedule triger --- .github/workflows/update-changelog.yml | 4 ++++ tasks/snapTasks.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index 6ffc2518a6..7e9a584f21 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -2,6 +2,10 @@ name: Update CHANGELOG on: workflow_dispatch +schedule: + # Runs every Tuesday at 9 PM Pacific Time (5 AM UTC Wednesday) + - cron: '0 5 * * 3' + permissions: contents: write pull-requests: write diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index 82a324d623..b284d2cb03 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -183,6 +183,6 @@ async function generatePRList(startSHA: string, endSHA: string): Promise pr.length > 0); } catch (error) { logWarning(`PR finder failed: ${error instanceof Error ? error.message : error}`, error); - return []; + throw error; } } From c8f10886fd0f2be8f8081e977fa920e08bd1b2d4 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Fri, 26 Sep 2025 18:05:39 +0000 Subject: [PATCH 014/105] Localization result of e09227b2fa8b60bc12c6cfe0eb9806b356fef577. --- l10n/bundle.l10n.ja.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n/bundle.l10n.ja.json b/l10n/bundle.l10n.ja.json index 3f4457458f..170313b44e 100644 --- a/l10n/bundle.l10n.ja.json +++ b/l10n/bundle.l10n.ja.json @@ -37,7 +37,7 @@ "Copy Html": "HTML のコピー", "Copy issue content again": "問題の内容をもう一度コピーする", "Could not determine CSharp content": "CSharp コンテンツを特定できませんでした", - "Could not determine CSharp content: {0}": "Could not determine CSharp content: {0}", + "Could not determine CSharp content: {0}": "CSharp コンテンツを特定できませんでした: {0}", "Could not determine Html content": "HTML コンテンツを特定できませんでした", "Could not find '{0}' in or above '{1}'.": "'{1}' 以上に '{0}' が見つかりませんでした。", "Could not find Razor Language Server executable '{0}' within directory": "ディレクトリ内に Razor 言語サーバーの実行可能ファイル '{0}' が見つかりませんでした", From b18d601febd5930aeea54bc66a12dde6e2583bb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:11:28 +0000 Subject: [PATCH 015/105] Bump tar-fs from 2.1.3 to 2.1.4 Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.3 to 2.1.4. - [Commits](https://github.com/mafintosh/tar-fs/compare/v2.1.3...v2.1.4) --- updated-dependencies: - dependency-name: tar-fs dependency-version: 2.1.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index c49bc8bd92..a53c2c19c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13823,9 +13823,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha1-+zuIQ6JrbxOgjmBveSKHXrH7v5I=", + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha1-gAgk2/TvBt7Zr+pKyv5xxnx2uTA=", "dev": true, "license": "MIT", "optional": true, @@ -25190,9 +25190,9 @@ } }, "tar-fs": { - "version": "2.1.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha1-+zuIQ6JrbxOgjmBveSKHXrH7v5I=", + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha1-gAgk2/TvBt7Zr+pKyv5xxnx2uTA=", "dev": true, "optional": true, "requires": { From 1acc61d610c75be8046c4617c03234739dd744a3 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 11:36:49 -0700 Subject: [PATCH 016/105] Fix GH action --- .github/workflows/update-changelog.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index 7e9a584f21..f72a543958 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -1,10 +1,9 @@ name: Update CHANGELOG on: - workflow_dispatch - -schedule: - # Runs every Tuesday at 9 PM Pacific Time (5 AM UTC Wednesday) - - cron: '0 5 * * 3' + workflow_dispatch: + schedule: + # Runs every Tuesday at 9 PM Pacific Time (5 AM UTC Wednesday) + - cron: '0 5 * * 3' permissions: contents: write From 7796a51c23ed65a7b1c47e4620698154a51d0276 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 11:42:36 -0700 Subject: [PATCH 017/105] fetch tags --- .github/workflows/update-changelog.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index f72a543958..d92eee4e09 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -15,6 +15,8 @@ jobs: steps: - name: Check out uses: actions/checkout@v2 + with: + fetch-tags: true - name: Install NodeJS uses: actions/setup-node@v4 with: From 566fc0baa2c00718fc2d5b2981da4bce4a15b125 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 11:45:34 -0700 Subject: [PATCH 018/105] Fetch history --- .github/workflows/update-changelog.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index d92eee4e09..1821ecf31d 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -16,6 +16,7 @@ jobs: - name: Check out uses: actions/checkout@v2 with: + fetch-depth: 0 fetch-tags: true - name: Install NodeJS uses: actions/setup-node@v4 From cc442ed5940626b5f17e6426288c6cb56c37fbcc Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 26 Sep 2025 11:49:16 -0700 Subject: [PATCH 019/105] Install roslyn-tools --- .github/workflows/update-changelog.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index f72a543958..25ae05e2e8 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -15,6 +15,8 @@ jobs: steps: - name: Check out uses: actions/checkout@v2 + - name: Install roslyn-tools + run: dotnet tool install -g Microsoft.RoslynTools --prerelease --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json - name: Install NodeJS uses: actions/setup-node@v4 with: From cbb08d8f78f3cddd91c296d0d764fe3c7843c359 Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Fri, 26 Sep 2025 20:13:55 +0000 Subject: [PATCH 020/105] Update main CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a64b036b5f..5f29427c41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.94.x +* Install roslyn-tools (PR: [#8663](https://github.com/dotnet/vscode-csharp/pull/8663)) +* Bump tar-fs from 2.1.3 to 2.1.4 (PR: [#8661](https://github.com/dotnet/vscode-csharp/pull/8661)) +* Add copilot setup steps (PR: [#8655](https://github.com/dotnet/vscode-csharp/pull/8655)) +* Update pipeline and packaging excludes (PR: [#8654](https://github.com/dotnet/vscode-csharp/pull/8654)) # 2.93.x * Bump Roslyn to 5.0.0-2.25472.11 (PR: [#8646](https://github.com/dotnet/vscode-csharp/pull/8646)) From f2a0fec4340b72843ef88813d80506540807690e Mon Sep 17 00:00:00 2001 From: Kirill Ovchinnikov Date: Mon, 29 Sep 2025 15:50:20 +0200 Subject: [PATCH 021/105] Bump xamlTools to 18.0.11016.94 and roslyn to 5.1.0-1.25477 --- CHANGELOG.md | 9 +++++++++ package.json | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f29427c41..53ec0eabaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,15 @@ - 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) +# 2.95.x +* Bump xamlTools to 18.0.11016.94 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) +* Bump Roslyn to 5.1.0-1.25475.3 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) + * Fix index out of bounds producing diagnostic in error recovery scenario (PR: [#80391](https://github.com/dotnet/roslyn/pull/80391)) + * Fix pp directives when converting block bodies to expression bodies (PR: [#80401](https://github.com/dotnet/roslyn/pull/80401)) + * Fix renaming of type parameters used in object creation expressions (PR: [#80403](https://github.com/dotnet/roslyn/pull/80403)) + * Add timing data for Proposal Adjuster fixers (PR: [#80406](https://github.com/dotnet/roslyn/pull/80406)) + * Update ManagedHotReloadLanguageServiceBridge.cs to avoid raising not implement exception when projects is empty (PR: [#80408](https://github.com/dotnet/roslyn/pull/80408)) + # 2.94.x * Install roslyn-tools (PR: [#8663](https://github.com/dotnet/vscode-csharp/pull/8663)) * Bump tar-fs from 2.1.3 to 2.1.4 (PR: [#8661](https://github.com/dotnet/vscode-csharp/pull/8661)) diff --git a/package.json b/package.json index 1228213b7d..ffea150614 100644 --- a/package.json +++ b/package.json @@ -40,11 +40,11 @@ "workspace" ], "defaults": { - "roslyn": "5.0.0-2.25472.11", + "roslyn": "5.1.0-1.25475.3", "omniSharp": "1.39.14", "razor": "10.0.0-preview.25472.6", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "17.14.36106.43" + "xamlTools": "18.0.11016.94" }, "main": "./dist/extension", "l10n": "./l10n", From c3dddc7b5d37f8e6b726b6c08ce404ef49a41055 Mon Sep 17 00:00:00 2001 From: I'm OK <15909793+noiseonwires@users.noreply.github.com> Date: Tue, 30 Sep 2025 09:55:02 +0200 Subject: [PATCH 022/105] Update CHANGELOG.md Co-authored-by: Joey Robichaud --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53ec0eabaf..6fa3f4dda1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ - 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) -# 2.95.x +# 2.94.x * Bump xamlTools to 18.0.11016.94 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) * Bump Roslyn to 5.1.0-1.25475.3 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) * Fix index out of bounds producing diagnostic in error recovery scenario (PR: [#80391](https://github.com/dotnet/roslyn/pull/80391)) @@ -11,8 +11,6 @@ * Fix renaming of type parameters used in object creation expressions (PR: [#80403](https://github.com/dotnet/roslyn/pull/80403)) * Add timing data for Proposal Adjuster fixers (PR: [#80406](https://github.com/dotnet/roslyn/pull/80406)) * Update ManagedHotReloadLanguageServiceBridge.cs to avoid raising not implement exception when projects is empty (PR: [#80408](https://github.com/dotnet/roslyn/pull/80408)) - -# 2.94.x * Install roslyn-tools (PR: [#8663](https://github.com/dotnet/vscode-csharp/pull/8663)) * Bump tar-fs from 2.1.3 to 2.1.4 (PR: [#8661](https://github.com/dotnet/vscode-csharp/pull/8661)) * Add copilot setup steps (PR: [#8655](https://github.com/dotnet/vscode-csharp/pull/8655)) From c7377666c5db141deabdec093d4b071c94bc28d2 Mon Sep 17 00:00:00 2001 From: Kirill Ovchinnikov Date: Wed, 1 Oct 2025 11:33:31 +0200 Subject: [PATCH 023/105] Bump xamlTools to 18.0.11023.10 --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fa3f4dda1..521fb5396c 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) # 2.94.x -* Bump xamlTools to 18.0.11016.94 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) +* Bump xamlTools to 18.0.11023.10 (PR: [#8669](https://github.com/dotnet/vscode-csharp/pull/8669)) * Bump Roslyn to 5.1.0-1.25475.3 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) * Fix index out of bounds producing diagnostic in error recovery scenario (PR: [#80391](https://github.com/dotnet/roslyn/pull/80391)) * Fix pp directives when converting block bodies to expression bodies (PR: [#80401](https://github.com/dotnet/roslyn/pull/80401)) diff --git a/package.json b/package.json index ffea150614..b2a090ccd9 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "omniSharp": "1.39.14", "razor": "10.0.0-preview.25472.6", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "18.0.11016.94" + "xamlTools": "18.0.11023.10" }, "main": "./dist/extension", "l10n": "./l10n", From 7828c9d9674e9595d6fe34f16466449bfa02ffa7 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 1 Oct 2025 06:51:44 -0700 Subject: [PATCH 024/105] Fix update changelog script --- .github/workflows/update-changelog.yml | 4 ++-- CHANGELOG.md | 5 +++++ tasks/snapTasks.ts | 6 +++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index 59cd6a6593..8f3bc05360 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -25,9 +25,9 @@ jobs: node-version: '20.x' - name: Install dependencies run: npm ci - - name: Update version.json + - name: Update CHANGELOG run: npx gulp updateChangelog - - name: Create version update PR + - name: Create update PR uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fa3f4dda1..7cd76e0876 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) # 2.94.x +* Update RoslynCopilot url to 18.0.797-alpha (PR: [#8652](https://github.com/OmniSharp/omnisharp-vscode/pull/8652)) +* Fix GH action (PR: [#8662](https://github.com/OmniSharp/omnisharp-vscode/pull/8662)) +* Adds a new GH action to update the CHANGELOG (PR: [#8658](https://github.com/OmniSharp/omnisharp-vscode/pull/8658)) +* Do not run legacy Razor tests in CI (PR: [#8656](https://github.com/OmniSharp/omnisharp-vscode/pull/8656)) +* Update third party notices for currently shipped version (PR: [#8653](https://github.com/OmniSharp/omnisharp-vscode/pull/8653)) * Bump xamlTools to 18.0.11016.94 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) * Bump Roslyn to 5.1.0-1.25475.3 (PR: [#8665](https://github.com/dotnet/vscode-csharp/pull/8665)) * Fix index out of bounds producing diagnostic in error recovery scenario (PR: [#80391](https://github.com/dotnet/roslyn/pull/80391)) diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index b284d2cb03..bea8efa285 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -141,10 +141,10 @@ gulp.task('updateChangelog', async (): Promise => { fs.writeFileSync(changelogPath, changelogLines.join(os.EOL)); }); -const prRegex = /^\*.+\(PR: \[#(\d+)\]\(/g; +const prRegex = /^\*.+\(PR: \[#(\d+)\]\(/; function findNextVersionHeaderLine(changelogLines: string[], startLine: number = 0): [number, string] { - const headerRegex = /^#\s(\d+\.\d+)\.(x|\d+)$/gm; + const headerRegex = /^#\s(\d+\.\d+)\.(x|\d+)$/; for (let i = startLine; i < changelogLines.length; i++) { const line = changelogLines.at(i); const match = headerRegex.exec(line!); @@ -160,7 +160,7 @@ function getPrIdsBetweenHeaders(changelogLines: string[], startLine: number, end for (let i = startLine; i < endLine; i++) { const line = changelogLines.at(i); const match = prRegex.exec(line!); - if (match && match[1]) { + if (match) { prs.push(match[1]); } } From 0edc544991f3108481296f0e61ffe2bc12074b59 Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Wed, 1 Oct 2025 18:19:42 +0000 Subject: [PATCH 025/105] Update main CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c205514aa..ddebba49a1 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.94.x +* Fix update changelog script (PR: [#8671](https://github.com/dotnet/vscode-csharp/pull/8671)) * Update RoslynCopilot url to 18.0.797-alpha (PR: [#8652](https://github.com/OmniSharp/omnisharp-vscode/pull/8652)) * Fix GH action (PR: [#8662](https://github.com/OmniSharp/omnisharp-vscode/pull/8662)) * Adds a new GH action to update the CHANGELOG (PR: [#8658](https://github.com/OmniSharp/omnisharp-vscode/pull/8658)) From 336e4726b90abb8eb259e2120c2b582ab7d8f87d Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 2 Oct 2025 16:03:01 -0700 Subject: [PATCH 026/105] Add generated copilot instructions --- .github/copilot-instructions.md | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000000..e12d1540b2 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,46 @@ +# Copilot Coding Agent Instructions for `vscode-csharp` + +## Project Overview +- This is the official C# extension for Visual Studio Code, supporting C# development via OmniSharp and Roslyn-based language servers. +- The codebase is TypeScript/JavaScript, with some JSON and configuration files. It integrates with .NET components and external language servers. + +## Architecture & Key Components +- **src/**: Main extension source. Key subfolders: + - `lsptoolshost/`: Hosts LSP (Language Server Protocol) logic, including Copilot integration (`copilot/`), Roslyn, and Razor support. + - `omnisharp/`: Protocols and logic for OmniSharp-based language server. + - `razor/`: Razor language support and configuration. +- **Copilot Integration**: + - `src/lsptoolshost/copilot/contextProviders.ts` and `relatedFilesProvider.ts` register C# context and related files providers for GitHub Copilot and Copilot Chat extensions. + - The Roslyn Copilot language server is managed as a downloadable component (see `package.json` and `CONTRIBUTING.md`). + +## Developer Workflows +- **Build**: `npm run compile` (or use VS Code build task) +- **Test**: `npm test` (runs Jest tests) +- **Package**: `npm run package` (creates VSIX) +- **Dependencies**: Use `gulp installDependencies` to fetch .NET/LS components +- **Debugging**: See `docs/debugger/` for advanced .NET debugging, including runtime and external library debugging. +- **Roslyn Copilot Language Server**: To update/test, see instructions in `CONTRIBUTING.md` (triggers pipeline, checks logs for install, etc.) + +## Project Conventions & Patterns +- **TypeScript**: Follows strict linting (`.eslintrc.js`), including header/license blocks and camelCase filenames (except for interfaces and special files). +- **Component Downloads**: Language servers and debuggers are downloaded at runtime; see `package.json` for URLs and install logic. +- **Copilot Providers**: Use `registerCopilotContextProviders` and `registerCopilotRelatedFilesProvider` to extend Copilot context for C#. +- **Testing**: Tests are in `test/` and use Jest. Some grammars and language configs are embedded for Razor and XAML. + +## Integration Points +- **GitHub Copilot**: Extension registers C# context and related files providers if Copilot/Copilot Chat extensions are present. +- **Roslyn Language Server**: Managed as a downloadable component, versioned in `package.json` and updated via pipeline. +- **OmniSharp**: Legacy support, also downloaded as a component. + +## Examples +- To add a new Copilot context provider: see `src/lsptoolshost/copilot/contextProviders.ts`. +- To update Roslyn Copilot server: follow `CONTRIBUTING.md` > "Updating the Roslyn Copilot Language Server version". + +## References +- [README.md](../README.md): User-facing overview and features +- [CONTRIBUTING.md](../CONTRIBUTING.md): Dev setup, packaging, and advanced workflows +- [package.json](../package.json): Component download logic, scripts +- [src/lsptoolshost/copilot/](../src/lsptoolshost/copilot/): Copilot integration logic + +--- +For any unclear or incomplete sections, please provide feedback to improve these instructions. \ No newline at end of file From 75ad9fb41ad4df9accf1e73068a7a0d2f4a508f1 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 2 Oct 2025 16:09:58 -0700 Subject: [PATCH 027/105] add some additional notes --- .github/copilot-instructions.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index e12d1540b2..7ac40b9d16 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -21,11 +21,27 @@ - **Debugging**: See `docs/debugger/` for advanced .NET debugging, including runtime and external library debugging. - **Roslyn Copilot Language Server**: To update/test, see instructions in `CONTRIBUTING.md` (triggers pipeline, checks logs for install, etc.) +## Infrastructure Tasks +- **Tasks Directory**: Build automation is in `tasks/` using Gulp. Key modules: + - `testTasks.ts`: Test orchestration for unit/integration tests across components + - `offlinePackagingTasks.ts`: VSIX packaging for different platforms (`vsix:release:package:*`) + - `componentUpdateTasks.ts`: Automated updates for Roslyn Copilot components + - `snapTasks.ts`: Version bumping and changelog management for releases + - `gitTasks.ts`: Git operations for automated PR creation and branch management +- **Adding New Tasks**: Create `.ts` file in `tasks/`, define `gulp.task()` functions, require in `gulpfile.ts` +- **Task Patterns**: Use `projectPaths.ts` for consistent path references, follow existing naming conventions (`test:integration:*`, `vsix:*`, etc.) + ## Project Conventions & Patterns - **TypeScript**: Follows strict linting (`.eslintrc.js`), including header/license blocks and camelCase filenames (except for interfaces and special files). - **Component Downloads**: Language servers and debuggers are downloaded at runtime; see `package.json` for URLs and install logic. - **Copilot Providers**: Use `registerCopilotContextProviders` and `registerCopilotRelatedFilesProvider` to extend Copilot context for C#. -- **Testing**: Tests are in `test/` and use Jest. Some grammars and language configs are embedded for Razor and XAML. +- **Testing**: Prefer integration tests over unit tests for features. Structure follows: + - `test/lsptoolshost/integrationTests/` for Roslyn/LSP features + - `test/omnisharp/omnisharpIntegrationTests/` for OmniSharp features + - `test/razor/razorIntegrationTests/` for Razor features + - Use `test/*/integrationTests/integrationHelpers.ts` for test setup utilities + - Tests use Jest with VS Code test environment and require workspace test assets + - Run with `npm run test:integration:*` commands (e.g., `npm run test:integration:csharp`) ## Integration Points - **GitHub Copilot**: Extension registers C# context and related files providers if Copilot/Copilot Chat extensions are present. From 963ce3856337466ebca88fdd5de6935f07f164af Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 3 Oct 2025 06:38:09 -0700 Subject: [PATCH 028/105] Fix up changelog --- CHANGELOG.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddebba49a1..e994671f59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,13 +24,13 @@ # 2.93.x * Bump Roslyn to 5.0.0-2.25472.11 (PR: [#8646](https://github.com/dotnet/vscode-csharp/pull/8646)) - * Fix handling edits in types nested in reloadable types(PR: [#80360](https://github.com/dotnet/roslyn/pull/80360)) - * Remove CS1998 warning entirely and remove dependent C# code fix providers(PR: [#80144](https://github.com/dotnet/roslyn/pull/80144)) - * Only restore based on assets file changes if the actual content changed(PR: [#80341](https://github.com/dotnet/roslyn/pull/80341)) + * Fix handling edits in types nested in reloadable types (PR: [#80360](https://github.com/dotnet/roslyn/pull/80360)) + * Remove CS1998 warning entirely and remove dependent C# code fix providers (PR: [#80144](https://github.com/dotnet/roslyn/pull/80144)) + * Only restore based on assets file changes if the actual content changed (PR: [#80341](https://github.com/dotnet/roslyn/pull/80341)) * Fix issue where build artifacts were added in source tree (PR: [#80324](https://github.com/dotnet/roslyn/pull/80324)) - * Allow clients to send range ending at the line after the last line in the document(PR: [#80310](https://github.com/dotnet/roslyn/pull/80310)) - * Don't show Razor diagnostics in Full Solution Analysis(PR: [#80296](https://github.com/dotnet/roslyn/pull/80296)) - * Log project context in which document was found(PR: [#80202](https://github.com/dotnet/roslyn/pull/80202)) + * Allow clients to send range ending at the line after the last line in the document (PR: [#80310](https://github.com/dotnet/roslyn/pull/80310)) + * Don't show Razor diagnostics in Full Solution Analysis (PR: [#80296](https://github.com/dotnet/roslyn/pull/80296)) + * Log project context in which document was found (PR: [#80202](https://github.com/dotnet/roslyn/pull/80202)) * Bump Razor to 10.0.0-preview.25472.6 (PR: [#8639](https://github.com/dotnet/vscode-csharp/pull/8639)) * Support view components in Go To Def (PR: [#12222](https://github.com/dotnet/razor/pull/12222)) * Redirect the older named assembly too (PR: [#12239](https://github.com/dotnet/razor/pull/12239)) @@ -45,10 +45,10 @@ # 2.91.x * Bump Roslyn to 5.0.0-2.25458.10 (PR: [#8588](https://github.com/dotnet/vscode-csharp/pull/8588)) - * Move brace adjustment on enter to on auto insert in LSP(PR: [#80075](https://github.com/dotnet/roslyn/pull/80075)) - * Avoid throwing when obsolete overload of GetUpdatesAsync is invoked with empty array(PR: [#80161](https://github.com/dotnet/roslyn/pull/80161)) - * Bump patch version of MSBuild packages(PR: [#80156](https://github.com/dotnet/roslyn/pull/80156)) - * Include category in Hot Reload log messages(PR: [#80160](https://github.com/dotnet/roslyn/pull/80160)) + * Move brace adjustment on enter to on auto insert in LSP (PR: [#80075](https://github.com/dotnet/roslyn/pull/80075)) + * Avoid throwing when obsolete overload of GetUpdatesAsync is invoked with empty array (PR: [#80161](https://github.com/dotnet/roslyn/pull/80161)) + * Bump patch version of MSBuild packages (PR: [#80156](https://github.com/dotnet/roslyn/pull/80156)) + * Include category in Hot Reload log messages (PR: [#80160](https://github.com/dotnet/roslyn/pull/80160)) * Store client's version for open docs (PR: [#80064](https://github.com/dotnet/roslyn/pull/80064)) * Pass global properties and the binary log path via RPC to BuildHost (PR: [#80094](https://github.com/dotnet/roslyn/pull/80094)) * Don't switch runtime / design time solutions if cohosting is on (PR: [#80065](https://github.com/dotnet/roslyn/pull/80065)) From e2b7ae71ba4cc98158da8030f57e9f1ef1eb998e Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 6 Oct 2025 11:54:05 +1100 Subject: [PATCH 029/105] Bump Razor to 10.0.0-preview.25503.1 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e994671f59..5f58a41c68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ - 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) +# 2.95.x +* Bump Razor to 10.0.0-preview.25503.1 (PR: [#8678](https://github.com/dotnet/vscode-csharp/pull/8678)) + * Ensure RazorVSInternalCompletionParams is used for serialization of completion requests (PR: [#12271](https://github.com/dotnet/razor/pull/12271)) + # 2.94.x * Fix update changelog script (PR: [#8671](https://github.com/dotnet/vscode-csharp/pull/8671)) * Update RoslynCopilot url to 18.0.797-alpha (PR: [#8652](https://github.com/OmniSharp/omnisharp-vscode/pull/8652)) diff --git a/package.json b/package.json index c54eaf1a96..64aef8f928 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "defaults": { "roslyn": "5.1.0-1.25475.3", "omniSharp": "1.39.14", - "razor": "10.0.0-preview.25472.6", + "razor": "10.0.0-preview.25503.1", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "18.0.11023.10" }, From 144da8bd0bcf496aeb1a01d78e73f83301a7993f Mon Sep 17 00:00:00 2001 From: Rikki Gibson Date: Mon, 6 Oct 2025 12:26:25 -0700 Subject: [PATCH 030/105] Add new telemetry fields (#8673) --- CHANGELOG.md | 17 +++++++++++++++++ package.json | 2 +- src/shared/projectConfiguration.ts | 15 +++++++++++++++ .../logging/telemetryObserver.test.ts | 6 ++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e994671f59..e43099392e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,23 @@ * Bump tar-fs from 2.1.3 to 2.1.4 (PR: [#8661](https://github.com/dotnet/vscode-csharp/pull/8661)) * Add copilot setup steps (PR: [#8655](https://github.com/dotnet/vscode-csharp/pull/8655)) * Update pipeline and packaging excludes (PR: [#8654](https://github.com/dotnet/vscode-csharp/pull/8654)) +* Add new telemetry fields (PR: [#8673](https://github.com/dotnet/vscode-csharp/pull/8673)) +* Bump Roslyn to 5.1.0-1.25506.3 (PR: [#8673](https://github.com/dotnet/vscode-csharp/pull/8673)) + * Improve error recovery when object initializer uses ':' instead of '=' (PR: [#80553](https://github.com/dotnet/roslyn/pull/80553)) + * Support `field` keyword in EE. (PR: [#80515](https://github.com/dotnet/roslyn/pull/80515)) + * Log a debug message for ContentModified exceptions. (PR: [#80549](https://github.com/dotnet/roslyn/pull/80549)) + * Update proposal adjuster to acquire feature flags from VS (PR: [#80541](https://github.com/dotnet/roslyn/pull/80541)) + * Add telemetry indicating when file-based programs are used (PR: [#80538](https://github.com/dotnet/roslyn/pull/80538)) + * Fix thread safety issue in BuildServerConnection.TryCreateServer environment variable handling (PR: [#80498](https://github.com/dotnet/roslyn/pull/80498)) + * Extensions: refine tracking of used imports (PR: [#80485](https://github.com/dotnet/roslyn/pull/80485)) + * Disambiguate extension methods in "ambiguous call" error message when they have the same name but are from different assemblies (PR: [#80453](https://github.com/dotnet/roslyn/pull/80453)) + * Block file-local EmbeddedAttribute definitions. (PR: [#80501](https://github.com/dotnet/roslyn/pull/80501)) + * Extension block members do not have `this` parameter (PR: [#80457](https://github.com/dotnet/roslyn/pull/80457)) + * Handle some scenarios where attributes applied in local functions or lambdas within extension blocks were missing in metadata (PR: [#80464](https://github.com/dotnet/roslyn/pull/80464)) + * Unset other DOTNET_ROOT env vars when launching apphosts (PR: [#80492](https://github.com/dotnet/roslyn/pull/80492)) + * Add friendlier error message on an explicit implementation when the return type is wrong (PR: [#8037](https://github.com/dotnet/roslyn/pull/80376) + * Extensions: add Name property on embedded ExtensionMarkerAttribute (PR: [#80456](https://github.com/dotnet/roslyn/pull/80456)) + * Avoid implicit null checks while narrowing type for `or` patterns (PR: [#80348](https://github.com/dotnet/roslyn/pull/80348)) # 2.93.x * Bump Roslyn to 5.0.0-2.25472.11 (PR: [#8646](https://github.com/dotnet/vscode-csharp/pull/8646)) diff --git a/package.json b/package.json index c54eaf1a96..501e0d28c6 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "workspace" ], "defaults": { - "roslyn": "5.1.0-1.25475.3", + "roslyn": "5.1.0-1.25506.3", "omniSharp": "1.39.14", "razor": "10.0.0-preview.25472.6", "razorOmnisharp": "7.0.0-preview.23363.1", diff --git a/src/shared/projectConfiguration.ts b/src/shared/projectConfiguration.ts index 8e5bb01335..e774cc24bb 100644 --- a/src/shared/projectConfiguration.ts +++ b/src/shared/projectConfiguration.ts @@ -19,6 +19,9 @@ export interface ProjectConfigurationMessage { FileExtensions: string[]; FileCounts: number[]; SdkStyleProject: boolean; + HasSolutionFile?: boolean; + IsFileBasedProgram?: boolean; + IsMiscellaneousFile?: boolean; } export function reportProjectConfigurationEvent( @@ -47,6 +50,18 @@ export function reportProjectConfigurationEvent( telemetryProps['NetSdkVersion'] = dotnetInfo?.Version ?? ''; telemetryProps['sdkStyleProject'] = projectConfig.SdkStyleProject.toString(); + if (projectConfig.HasSolutionFile != null) { + telemetryProps['HasSolutionFile'] = projectConfig.HasSolutionFile.toString(); + } + + if (projectConfig.IsFileBasedProgram != null) { + telemetryProps['IsFileBasedProgram'] = projectConfig.IsFileBasedProgram.toString(); + } + + if (projectConfig.IsMiscellaneousFile != null) { + telemetryProps['IsMiscellaneousFile'] = projectConfig.IsMiscellaneousFile.toString(); + } + if (useModernNet) { telemetryProps['useModernNet'] = useModernNet.toString(); } diff --git a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts index 0110c87f9a..26b4bf3728 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/telemetryObserver.test.ts @@ -100,6 +100,9 @@ describe('TelemetryReporterObserver', () => { FileExtensions: fileExtensions, FileCounts: fileCounts, SdkStyleProject: sdkStyleProject, + HasSolutionFile: true, + IsFileBasedProgram: true, + IsMiscellaneousFile: true, }); await observer.post(event); @@ -114,6 +117,9 @@ describe('TelemetryReporterObserver', () => { expect(property['FileCounts']).toEqual('7|3'); expect(property['useModernNet']).toEqual('true'); expect(property['sdkStyleProject']).toEqual('true'); + expect(property['HasSolutionFile']).toEqual('true'); + expect(property['IsFileBasedProgram']).toEqual('true'); + expect(property['IsMiscellaneousFile']).toEqual('true'); }); [ From 848e3a18f6abd2217fae976a55c5c13497d16f05 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 6 Oct 2025 13:45:14 -0700 Subject: [PATCH 031/105] Add package.json completion for razor components --- package.json | 8 ++++++++ package.nls.json | 2 ++ 2 files changed, 10 insertions(+) diff --git a/package.json b/package.json index 501e0d28c6..c83786de85 100644 --- a/package.json +++ b/package.json @@ -1439,6 +1439,14 @@ "roslynCopilot": { "description": "%configuration.dotnet.server.componentPaths.roslynCopilot%", "type": "string" + }, + "razorExtension": { + "description": "%configuration.dotnet.server.componentPaths.razorExtension%", + "type": "string" + }, + "razorDevKit": { + "description": "%configuration.dotnet.server.componentPaths.razorDevKit%", + "type": "string" } }, "default": {} diff --git a/package.nls.json b/package.nls.json index ec1c9539a8..58dfcafad3 100644 --- a/package.nls.json +++ b/package.nls.json @@ -32,6 +32,8 @@ "configuration.dotnet.server.componentPaths.roslynDevKit": "Overrides the folder path for the .roslynDevKit component of the language server", "configuration.dotnet.server.componentPaths.xamlTools": "Overrides the folder path for the .xamlTools component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Overrides the folder path for the .roslynCopilot component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", "configuration.dotnet.server.startTimeout": "Specifies a timeout (in ms) for the client to successfully start and connect to the language server.", "configuration.dotnet.server.waitForDebugger": "Passes the --debug flag when launching the server to allow a debugger to be attached. (Previously `omnisharp.waitForDebugger`)", "configuration.dotnet.server.extensionPaths": "Override for path to language server --extension arguments", From 985e4a640de6e9a5451dbda642563ea5df69f7be Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Mon, 6 Oct 2025 21:19:41 +0000 Subject: [PATCH 032/105] Localization result of 1edab1f825ac6661b6afaad61c87c1259b9516a7. --- 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, 26 insertions(+) diff --git a/package.nls.cs.json b/package.nls.cs.json index 55d3974d72..5d2093feb8 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Umožňuje využívat prostředí „programů založených na souborech“ (dotnet run app.cs) ve verzi Preview.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Zobrazit informace o poznámkách při zobrazení symbolu.", "configuration.dotnet.server.componentPaths": "Umožňuje přepsat cestu ke složce pro integrované komponenty jazykového serveru (například přepsat cestu .roslynDevKit v adresáři rozšíření tak, aby používala místně sestavené komponenty).", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Přepíše cestu ke složce pro komponentu .roslynCopilot jazykového serveru.", "configuration.dotnet.server.componentPaths.roslynDevKit": "Přepíše cestu ke složce pro komponentu .roslynDevKit jazykového serveru.", "configuration.dotnet.server.componentPaths.xamlTools": "Přepíše cestu ke složce pro komponentu .xamlTools jazykového serveru.", diff --git a/package.nls.de.json b/package.nls.de.json index 1c271e0ded..0f03515996 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Aktiviert die Vorschau für die Erfahrung „dateibasierte Programme“ (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Beschreibungsinformationen beim Anzeigen des Symbols anzeigen.", "configuration.dotnet.server.componentPaths": "Ermöglicht das Überschreiben des Ordnerpfads für eingebaute Komponenten des Sprachservers (z. B. Überschreiben des Pfads .roslynDevKit im Erweiterungsverzeichnis, um lokal erstellte Komponenten zu verwenden)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Überschreibt den Ordnerpfad für die .roslynCopilot-Komponente des Sprachservers", "configuration.dotnet.server.componentPaths.roslynDevKit": "Überschreibt den Ordnerpfad für die Komponente .roslynDevKit des Sprachservers", "configuration.dotnet.server.componentPaths.xamlTools": "Überschreibt den Ordnerpfad für die Komponente .xamlTools des Sprachservers", diff --git a/package.nls.es.json b/package.nls.es.json index 65e0aefa40..6d2c249d7e 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita la experiencia de vista previa de \"programas basados en archivos\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar información de comentarios cuando se muestra el símbolo.", "configuration.dotnet.server.componentPaths": "Permite invalidar la ruta de acceso de carpeta para los componentes integrados del servidor de lenguaje (por ejemplo, invalidar la ruta de acceso .roslynDevKit en el directorio de extensión para usar componentes compilados localmente).", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Invalida la ruta de acceso de la carpeta para el componente .roslynCopilot del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynDevKit": "Invalida la ruta de acceso de la carpeta para el componente .roslynDevKit del servidor de lenguaje.", "configuration.dotnet.server.componentPaths.xamlTools": "Invalida la ruta de acceso de la carpeta para el componente .xamlTools del servidor de lenguaje.", diff --git a/package.nls.fr.json b/package.nls.fr.json index 46020a4beb..c23e5ae650 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Active l’expérience de prévisualisation des « programmes basés sur des fichiers » (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Afficher les informations sur les remarques lors de l’affichage du symbole.", "configuration.dotnet.server.componentPaths": "Permet de remplacer le chemin d’accès au dossier des composants intégrés du serveur de langage (par exemple, remplacer le chemin d’accès .roslynDevKit dans le répertoire d’extension pour utiliser les composants générés localement).", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Remplace le chemin d’accès du dossier pour le composant .roslynCopilot du serveur de langage", "configuration.dotnet.server.componentPaths.roslynDevKit": "Remplace le chemin d’accès au dossier du composant .roslynDevKit du serveur de langage", "configuration.dotnet.server.componentPaths.xamlTools": "Remplace le chemin d’accès du dossier pour le composant .xamlTools du serveur de langage", diff --git a/package.nls.it.json b/package.nls.it.json index 826d7f1b31..c88bd3fff9 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Abilita l'esperienza di anteprima di \"programmi basati su file\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostra le informazioni sulle note quando viene visualizzato il simbolo.", "configuration.dotnet.server.componentPaths": "Consente di eseguire l'override del percorso della cartella per i componenti predefiniti del server di linguaggio (ad esempio, eseguire l'override del percorso .roslynDevKit nella directory delle estensioni per usare componenti compilati in locale)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Esegue l'override del percorso della cartella per il componente roslynCopilot del server di linguaggio", "configuration.dotnet.server.componentPaths.roslynDevKit": "Esegue l'override del percorso della cartella per il componente .roslynDevKit del server di linguaggio", "configuration.dotnet.server.componentPaths.xamlTools": "Esegue l'override del percorso della cartella per il componente .xamlTools del server di linguaggio", diff --git a/package.nls.ja.json b/package.nls.ja.json index 9b381417e2..f54264d384 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "プレビューの \"ファイル ベースのプログラム\" (dotnet run app.cs) エクスペリエンスを有効にします。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "シンボルを表示するときに注釈情報を表示します。", "configuration.dotnet.server.componentPaths": "言語サーバーの組み込みコンポーネントのフォルダー パスをオーバーライドできます (たとえば、ローカルにビルドされたコンポーネントを使用するように拡張ディレクトリの .roslynDevKit パスをオーバーライドする)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "言語サーバーの .roslynCopilot コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.roslynDevKit": "言語サーバーの .roslynDevKit コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.xamlTools": "言語サーバーの .xamlTools コンポーネントのフォルダー パスをオーバーライドします", diff --git a/package.nls.ko.json b/package.nls.ko.json index 7d9f613cff..ff4fa483c0 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "미리 보기 \"파일 기반 프로그램\"(dotnet run app.cs) 환경을 활성화합니다.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "기호를 표시할 때 설명 정보를 표시합니다.", "configuration.dotnet.server.componentPaths": "언어 서버의 기본 제공 구성 요소에 대한 폴더 경로를 재정의할 수 있습니다(예: 로컬로 빌드된 구성 요소를 사용하도록 확장 디렉터리의 .roslynDevKit 경로 재정의).", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "언어 서버의 .roslynCopilot 구성 요소에 대한 폴더 경로를 덮어씁니다.", "configuration.dotnet.server.componentPaths.roslynDevKit": "언어 서버의 .roslynDevKit 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.xamlTools": "언어 서버의 .xamlTools 구성 요소에 대한 폴더 경로를 재정의합니다.", diff --git a/package.nls.pl.json b/package.nls.pl.json index 430362e7a2..b78f221e02 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Włącza podgląd środowiska „programy oparte na plikach” (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Pokaż informacje o uwagach podczas wyświetlania symbolu.", "configuration.dotnet.server.componentPaths": "Umożliwia zastąpienie ścieżki folderu dla wbudowanych składników serwera języka (na przykład przesłonięcie ścieżki roslynDevKit w katalogu rozszerzenia w celu użycia składników skompilowanych lokalnie)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Przesłania ścieżkę folderu dla składnika .roslynCopilot serwera językowego", "configuration.dotnet.server.componentPaths.roslynDevKit": "Przesłania ścieżkę folderu dla składnika roslynDevKit serwera językowego", "configuration.dotnet.server.componentPaths.xamlTools": "Zastępuje ścieżkę folderu dla składnika xamlTools serwera języka", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 95a14376bb..3732b1d020 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita a experiência de prévia \"programas baseados em arquivo\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar informações de comentários ao exibir o símbolo.", "configuration.dotnet.server.componentPaths": "Permite substituir o caminho da pasta para componentes internos do servidor de linguagem (por exemplo, substituir o caminho .roslynDevKit no diretório de extensão para usar componentes compilados localmente)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Substitui o caminho da pasta para o componente .roslynCopilot do servidor de idiomas", "configuration.dotnet.server.componentPaths.roslynDevKit": "Substitui o caminho da pasta para o componente .roslynDevKit do servidor de linguagem", "configuration.dotnet.server.componentPaths.xamlTools": "Substitui o caminho da pasta para o componente .xamlTools do servidor de linguagem", diff --git a/package.nls.ru.json b/package.nls.ru.json index 883f0cf7b2..f8f6a2f242 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Включает предварительный просмотр \"программ на основе файлов\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Показывать примечания при отображении символа.", "configuration.dotnet.server.componentPaths": "Позволяет переопределить путь к папке для встроенных компонентов языкового сервера (например, переопределить путь .roslynDevKit в каталоге расширения для использования локально созданных компонентов).", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Переопределяет путь к папке для компонента .roslynCopilot языкового сервера", "configuration.dotnet.server.componentPaths.roslynDevKit": "Переопределяет путь к папке для компонента .roslynDevKit языкового сервера.", "configuration.dotnet.server.componentPaths.xamlTools": "Переопределяет путь к папке для компонента .xamlTools языкового сервера.", diff --git a/package.nls.tr.json b/package.nls.tr.json index c312596cf6..a411cd7067 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "\"Dosya tabanlı programlar\" (dotnet run app.cs) önizleme deneyimini etkinleştirir.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Simge görüntülendiğinde açıklama bilgilerini göster.", "configuration.dotnet.server.componentPaths": "Dil sunucusundaki yerleşik bileşenlerin klasör yolunu geçersiz kılmaya olanak tanır (örneğin, yerel olarak oluşturulan bileşenleri kullanmak için uzantı dizinindeki .roslynDevKit yolunu geçersiz kılın)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "Dil sunucusunun .roslynCopilot bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynDevKit": "Dil sunucusundaki .roslynDevKit bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.xamlTools": "Dil sunucusundaki .xamlTools bileşeninin klasör yolunu geçersiz kılar", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 674deabeb3..885fa2f58e 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "启用预览“基于文件的程序”(dotnet run app.cs)体验。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "显示符号时显示备注信息。", "configuration.dotnet.server.componentPaths": "允许替代语言服务器内置组件的文件夹路径(例如,替代扩展目录中的 .roslynDevKit 路径以使用本地生成的组件)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "替代语言服务器的 .roslynCopilot 组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynDevKit": "替代语言服务器的 .roslynDevKit 组件的文件夹路径", "configuration.dotnet.server.componentPaths.xamlTools": "替代语言服务器的 .xamlTools 组件的文件夹路径", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 9f72b41ed0..9cda6e9072 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -65,6 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "啟用「檔案型程式」 (dotnet run app.cs) 的預覽體驗。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "顯示符號時顯示備註資訊。", "configuration.dotnet.server.componentPaths": "允許覆寫語言伺服器內建元件的資料夾路徑 (例如,覆寫延伸模組目錄中的 .roslynDevKit 路徑,以使用本機建置的元件)", + "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", + "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", "configuration.dotnet.server.componentPaths.roslynCopilot": "覆寫語言伺服器 .roslynCopilot 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynDevKit": "覆寫語言伺服器 .roslynDevKit 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.xamlTools": "覆寫語言伺服器 .xamlTools 元件的資料夾路徑", From 1f110aaddca109ef5f18e7c8a6812333e62284b4 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Tue, 7 Oct 2025 09:26:29 +1100 Subject: [PATCH 033/105] Update CHANGELOG.md Co-authored-by: Joey Robichaud --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f58a41c68..e5895fe4fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,11 +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) -# 2.95.x +# 2.94.x * Bump Razor to 10.0.0-preview.25503.1 (PR: [#8678](https://github.com/dotnet/vscode-csharp/pull/8678)) * Ensure RazorVSInternalCompletionParams is used for serialization of completion requests (PR: [#12271](https://github.com/dotnet/razor/pull/12271)) - -# 2.94.x * Fix update changelog script (PR: [#8671](https://github.com/dotnet/vscode-csharp/pull/8671)) * Update RoslynCopilot url to 18.0.797-alpha (PR: [#8652](https://github.com/OmniSharp/omnisharp-vscode/pull/8652)) * Fix GH action (PR: [#8662](https://github.com/OmniSharp/omnisharp-vscode/pull/8662)) From 061a1246f2e664121d6c459ea85e630a74d287b8 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Tue, 7 Oct 2025 09:26:56 +1100 Subject: [PATCH 034/105] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5895fe4fe..f07b931c79 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) # 2.94.x -* Bump Razor to 10.0.0-preview.25503.1 (PR: [#8678](https://github.com/dotnet/vscode-csharp/pull/8678)) +* Bump Razor to 10.0.0-preview.25503.1 (PR: [#8679](https://github.com/dotnet/vscode-csharp/pull/8679)) * Ensure RazorVSInternalCompletionParams is used for serialization of completion requests (PR: [#12271](https://github.com/dotnet/razor/pull/12271)) * Fix update changelog script (PR: [#8671](https://github.com/dotnet/vscode-csharp/pull/8671)) * Update RoslynCopilot url to 18.0.797-alpha (PR: [#8652](https://github.com/OmniSharp/omnisharp-vscode/pull/8652)) From 562d1d0e37f4affb26c8d7abafd1821518937925 Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Wed, 8 Oct 2025 05:01:44 +0000 Subject: [PATCH 035/105] Update main CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a050cc5b4..539032a3b0 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) # 2.94.x +* Add completion for razor components in settings (PR: [#8680](https://github.com/dotnet/vscode-csharp/pull/8680)) +* Add copilot instructions (PR: [#8676](https://github.com/dotnet/vscode-csharp/pull/8676)) +* Fix up changelog (PR: [#8677](https://github.com/dotnet/vscode-csharp/pull/8677)) * Bump Razor to 10.0.0-preview.25503.1 (PR: [#8679](https://github.com/dotnet/vscode-csharp/pull/8679)) * Ensure RazorVSInternalCompletionParams is used for serialization of completion requests (PR: [#12271](https://github.com/dotnet/razor/pull/12271)) * Fix update changelog script (PR: [#8671](https://github.com/dotnet/vscode-csharp/pull/8671)) From 6c5b5f8a8bb1c4fd5f716ae7d8d0a7e1ef6ae016 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 8 Oct 2025 17:54:22 +0000 Subject: [PATCH 036/105] Localization result of c28be783482a70eaeafdfd5c1bc49cf1355d570c. --- package.nls.es.json | 4 ++-- package.nls.fr.json | 4 ++-- package.nls.ja.json | 4 ++-- package.nls.ko.json | 4 ++-- package.nls.pt-br.json | 4 ++-- package.nls.ru.json | 4 ++-- package.nls.tr.json | 4 ++-- package.nls.zh-cn.json | 4 ++-- package.nls.zh-tw.json | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.nls.es.json b/package.nls.es.json index 6d2c249d7e..4aa159049c 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita la experiencia de vista previa de \"programas basados en archivos\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar información de comentarios cuando se muestra el símbolo.", "configuration.dotnet.server.componentPaths": "Permite invalidar la ruta de acceso de carpeta para los componentes integrados del servidor de lenguaje (por ejemplo, invalidar la ruta de acceso .roslynDevKit en el directorio de extensión para usar componentes compilados localmente).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Invalida la ruta de acceso de la carpeta para el componente Razor Dev Kit del servidor de lenguaje", + "configuration.dotnet.server.componentPaths.razorExtension": "Invalida la ruta de acceso de la carpeta para el componente de extensión Razor del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynCopilot": "Invalida la ruta de acceso de la carpeta para el componente .roslynCopilot del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynDevKit": "Invalida la ruta de acceso de la carpeta para el componente .roslynDevKit del servidor de lenguaje.", "configuration.dotnet.server.componentPaths.xamlTools": "Invalida la ruta de acceso de la carpeta para el componente .xamlTools del servidor de lenguaje.", diff --git a/package.nls.fr.json b/package.nls.fr.json index c23e5ae650..d9f8a18e40 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Active l’expérience de prévisualisation des « programmes basés sur des fichiers » (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Afficher les informations sur les remarques lors de l’affichage du symbole.", "configuration.dotnet.server.componentPaths": "Permet de remplacer le chemin d’accès au dossier des composants intégrés du serveur de langage (par exemple, remplacer le chemin d’accès .roslynDevKit dans le répertoire d’extension pour utiliser les composants générés localement).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Remplace le chemin d’accès du dossier pour le composant du Kit de développement Razor du serveur de langage", + "configuration.dotnet.server.componentPaths.razorExtension": "Remplace le chemin d’accès du dossier pour le composant d’extension Razor du serveur de langage", "configuration.dotnet.server.componentPaths.roslynCopilot": "Remplace le chemin d’accès du dossier pour le composant .roslynCopilot du serveur de langage", "configuration.dotnet.server.componentPaths.roslynDevKit": "Remplace le chemin d’accès au dossier du composant .roslynDevKit du serveur de langage", "configuration.dotnet.server.componentPaths.xamlTools": "Remplace le chemin d’accès du dossier pour le composant .xamlTools du serveur de langage", diff --git a/package.nls.ja.json b/package.nls.ja.json index f54264d384..661b43dd1a 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "プレビューの \"ファイル ベースのプログラム\" (dotnet run app.cs) エクスペリエンスを有効にします。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "シンボルを表示するときに注釈情報を表示します。", "configuration.dotnet.server.componentPaths": "言語サーバーの組み込みコンポーネントのフォルダー パスをオーバーライドできます (たとえば、ローカルにビルドされたコンポーネントを使用するように拡張ディレクトリの .roslynDevKit パスをオーバーライドする)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "言語サーバーの Razor Dev Kit コンポーネントのフォルダー パスを上書きします", + "configuration.dotnet.server.componentPaths.razorExtension": "言語サーバーの Razor 拡張機能コンポーネントのフォルダー パスを上書きします", "configuration.dotnet.server.componentPaths.roslynCopilot": "言語サーバーの .roslynCopilot コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.roslynDevKit": "言語サーバーの .roslynDevKit コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.xamlTools": "言語サーバーの .xamlTools コンポーネントのフォルダー パスをオーバーライドします", diff --git a/package.nls.ko.json b/package.nls.ko.json index ff4fa483c0..fd74ce02cc 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "미리 보기 \"파일 기반 프로그램\"(dotnet run app.cs) 환경을 활성화합니다.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "기호를 표시할 때 설명 정보를 표시합니다.", "configuration.dotnet.server.componentPaths": "언어 서버의 기본 제공 구성 요소에 대한 폴더 경로를 재정의할 수 있습니다(예: 로컬로 빌드된 구성 요소를 사용하도록 확장 디렉터리의 .roslynDevKit 경로 재정의).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "언어 서버의 Razor Dev Kit 구성 요소에 대한 폴더 경로를 재정의합니다.", + "configuration.dotnet.server.componentPaths.razorExtension": "언어 서버의 Razor 확장 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.roslynCopilot": "언어 서버의 .roslynCopilot 구성 요소에 대한 폴더 경로를 덮어씁니다.", "configuration.dotnet.server.componentPaths.roslynDevKit": "언어 서버의 .roslynDevKit 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.xamlTools": "언어 서버의 .xamlTools 구성 요소에 대한 폴더 경로를 재정의합니다.", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 3732b1d020..4eb622bbed 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita a experiência de prévia \"programas baseados em arquivo\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar informações de comentários ao exibir o símbolo.", "configuration.dotnet.server.componentPaths": "Permite substituir o caminho da pasta para componentes internos do servidor de linguagem (por exemplo, substituir o caminho .roslynDevKit no diretório de extensão para usar componentes compilados localmente)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Substitui o caminho da pasta para o componente do Kit de Desenvolvimento do Razor do servidor de linguagem", + "configuration.dotnet.server.componentPaths.razorExtension": "Substitui o caminho da pasta para o componente de extensão Razor do servidor de linguagem", "configuration.dotnet.server.componentPaths.roslynCopilot": "Substitui o caminho da pasta para o componente .roslynCopilot do servidor de idiomas", "configuration.dotnet.server.componentPaths.roslynDevKit": "Substitui o caminho da pasta para o componente .roslynDevKit do servidor de linguagem", "configuration.dotnet.server.componentPaths.xamlTools": "Substitui o caminho da pasta para o componente .xamlTools do servidor de linguagem", diff --git a/package.nls.ru.json b/package.nls.ru.json index f8f6a2f242..1a7018c80a 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Включает предварительный просмотр \"программ на основе файлов\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Показывать примечания при отображении символа.", "configuration.dotnet.server.componentPaths": "Позволяет переопределить путь к папке для встроенных компонентов языкового сервера (например, переопределить путь .roslynDevKit в каталоге расширения для использования локально созданных компонентов).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Переопределяет путь к папке для компонента Razor Dev Kit языкового сервера", + "configuration.dotnet.server.componentPaths.razorExtension": "Переопределяет путь к папке для компонента расширения Razor языкового сервера", "configuration.dotnet.server.componentPaths.roslynCopilot": "Переопределяет путь к папке для компонента .roslynCopilot языкового сервера", "configuration.dotnet.server.componentPaths.roslynDevKit": "Переопределяет путь к папке для компонента .roslynDevKit языкового сервера.", "configuration.dotnet.server.componentPaths.xamlTools": "Переопределяет путь к папке для компонента .xamlTools языкового сервера.", diff --git a/package.nls.tr.json b/package.nls.tr.json index a411cd7067..99ac9f5a44 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "\"Dosya tabanlı programlar\" (dotnet run app.cs) önizleme deneyimini etkinleştirir.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Simge görüntülendiğinde açıklama bilgilerini göster.", "configuration.dotnet.server.componentPaths": "Dil sunucusundaki yerleşik bileşenlerin klasör yolunu geçersiz kılmaya olanak tanır (örneğin, yerel olarak oluşturulan bileşenleri kullanmak için uzantı dizinindeki .roslynDevKit yolunu geçersiz kılın)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Dil sunucusundaki Razor Geliştirme Paketi bileşeninin klasör yolunu geçersiz kılar", + "configuration.dotnet.server.componentPaths.razorExtension": "Dil sunucusundaki Razor uzantısı bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynCopilot": "Dil sunucusunun .roslynCopilot bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynDevKit": "Dil sunucusundaki .roslynDevKit bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.xamlTools": "Dil sunucusundaki .xamlTools bileşeninin klasör yolunu geçersiz kılar", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 885fa2f58e..419f5ac4d1 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "启用预览“基于文件的程序”(dotnet run app.cs)体验。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "显示符号时显示备注信息。", "configuration.dotnet.server.componentPaths": "允许替代语言服务器内置组件的文件夹路径(例如,替代扩展目录中的 .roslynDevKit 路径以使用本地生成的组件)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "替代语言服务器的 Razor 开发工具包组件的文件夹路径", + "configuration.dotnet.server.componentPaths.razorExtension": "替代语言服务器的 Razor 扩展组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynCopilot": "替代语言服务器的 .roslynCopilot 组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynDevKit": "替代语言服务器的 .roslynDevKit 组件的文件夹路径", "configuration.dotnet.server.componentPaths.xamlTools": "替代语言服务器的 .xamlTools 组件的文件夹路径", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 9cda6e9072..6890d5296a 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "啟用「檔案型程式」 (dotnet run app.cs) 的預覽體驗。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "顯示符號時顯示備註資訊。", "configuration.dotnet.server.componentPaths": "允許覆寫語言伺服器內建元件的資料夾路徑 (例如,覆寫延伸模組目錄中的 .roslynDevKit 路徑,以使用本機建置的元件)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "覆寫語言伺服器 Razor 開發套件元件的資料夾路徑", + "configuration.dotnet.server.componentPaths.razorExtension": "覆寫語言伺服器 Razor 延伸模組元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynCopilot": "覆寫語言伺服器 .roslynCopilot 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynDevKit": "覆寫語言伺服器 .roslynDevKit 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.xamlTools": "覆寫語言伺服器 .xamlTools 元件的資料夾路徑", From 4b0c8ac2a6308819768a6cad5ff93fb64d2426d4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Oct 2025 17:57:13 +0000 Subject: [PATCH 037/105] Initial plan From da339efaf8f3ab98562871e689d217ac8a668e8f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:02:01 +0000 Subject: [PATCH 038/105] Rename create-pull-request job to bump-main-version in branch-snap workflow Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- .github/workflows/branch-snap.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/branch-snap.yml b/.github/workflows/branch-snap.yml index 0ff08cbe13..578b7e1d16 100644 --- a/.github/workflows/branch-snap.yml +++ b/.github/workflows/branch-snap.yml @@ -12,7 +12,7 @@ jobs: with: configuration_file_path: '.config/snap-flow.json' - create-pull-request: + bump-main-version: if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: From 31b4b9fab2c6a347bd9dc8f4e44500095944c23e Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 8 Oct 2025 18:12:35 +0000 Subject: [PATCH 039/105] Localization result of fd32f01ae7d984a1ba58ecf57a670496754fa685. --- package.nls.es.json | 4 ++-- package.nls.fr.json | 4 ++-- package.nls.ja.json | 4 ++-- package.nls.ko.json | 4 ++-- package.nls.pt-br.json | 4 ++-- package.nls.ru.json | 4 ++-- package.nls.tr.json | 4 ++-- package.nls.zh-cn.json | 4 ++-- package.nls.zh-tw.json | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.nls.es.json b/package.nls.es.json index 6d2c249d7e..4aa159049c 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita la experiencia de vista previa de \"programas basados en archivos\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar información de comentarios cuando se muestra el símbolo.", "configuration.dotnet.server.componentPaths": "Permite invalidar la ruta de acceso de carpeta para los componentes integrados del servidor de lenguaje (por ejemplo, invalidar la ruta de acceso .roslynDevKit en el directorio de extensión para usar componentes compilados localmente).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Invalida la ruta de acceso de la carpeta para el componente Razor Dev Kit del servidor de lenguaje", + "configuration.dotnet.server.componentPaths.razorExtension": "Invalida la ruta de acceso de la carpeta para el componente de extensión Razor del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynCopilot": "Invalida la ruta de acceso de la carpeta para el componente .roslynCopilot del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynDevKit": "Invalida la ruta de acceso de la carpeta para el componente .roslynDevKit del servidor de lenguaje.", "configuration.dotnet.server.componentPaths.xamlTools": "Invalida la ruta de acceso de la carpeta para el componente .xamlTools del servidor de lenguaje.", diff --git a/package.nls.fr.json b/package.nls.fr.json index c23e5ae650..d9f8a18e40 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Active l’expérience de prévisualisation des « programmes basés sur des fichiers » (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Afficher les informations sur les remarques lors de l’affichage du symbole.", "configuration.dotnet.server.componentPaths": "Permet de remplacer le chemin d’accès au dossier des composants intégrés du serveur de langage (par exemple, remplacer le chemin d’accès .roslynDevKit dans le répertoire d’extension pour utiliser les composants générés localement).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Remplace le chemin d’accès du dossier pour le composant du Kit de développement Razor du serveur de langage", + "configuration.dotnet.server.componentPaths.razorExtension": "Remplace le chemin d’accès du dossier pour le composant d’extension Razor du serveur de langage", "configuration.dotnet.server.componentPaths.roslynCopilot": "Remplace le chemin d’accès du dossier pour le composant .roslynCopilot du serveur de langage", "configuration.dotnet.server.componentPaths.roslynDevKit": "Remplace le chemin d’accès au dossier du composant .roslynDevKit du serveur de langage", "configuration.dotnet.server.componentPaths.xamlTools": "Remplace le chemin d’accès du dossier pour le composant .xamlTools du serveur de langage", diff --git a/package.nls.ja.json b/package.nls.ja.json index f54264d384..661b43dd1a 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "プレビューの \"ファイル ベースのプログラム\" (dotnet run app.cs) エクスペリエンスを有効にします。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "シンボルを表示するときに注釈情報を表示します。", "configuration.dotnet.server.componentPaths": "言語サーバーの組み込みコンポーネントのフォルダー パスをオーバーライドできます (たとえば、ローカルにビルドされたコンポーネントを使用するように拡張ディレクトリの .roslynDevKit パスをオーバーライドする)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "言語サーバーの Razor Dev Kit コンポーネントのフォルダー パスを上書きします", + "configuration.dotnet.server.componentPaths.razorExtension": "言語サーバーの Razor 拡張機能コンポーネントのフォルダー パスを上書きします", "configuration.dotnet.server.componentPaths.roslynCopilot": "言語サーバーの .roslynCopilot コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.roslynDevKit": "言語サーバーの .roslynDevKit コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.xamlTools": "言語サーバーの .xamlTools コンポーネントのフォルダー パスをオーバーライドします", diff --git a/package.nls.ko.json b/package.nls.ko.json index ff4fa483c0..fd74ce02cc 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "미리 보기 \"파일 기반 프로그램\"(dotnet run app.cs) 환경을 활성화합니다.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "기호를 표시할 때 설명 정보를 표시합니다.", "configuration.dotnet.server.componentPaths": "언어 서버의 기본 제공 구성 요소에 대한 폴더 경로를 재정의할 수 있습니다(예: 로컬로 빌드된 구성 요소를 사용하도록 확장 디렉터리의 .roslynDevKit 경로 재정의).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "언어 서버의 Razor Dev Kit 구성 요소에 대한 폴더 경로를 재정의합니다.", + "configuration.dotnet.server.componentPaths.razorExtension": "언어 서버의 Razor 확장 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.roslynCopilot": "언어 서버의 .roslynCopilot 구성 요소에 대한 폴더 경로를 덮어씁니다.", "configuration.dotnet.server.componentPaths.roslynDevKit": "언어 서버의 .roslynDevKit 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.xamlTools": "언어 서버의 .xamlTools 구성 요소에 대한 폴더 경로를 재정의합니다.", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 3732b1d020..4eb622bbed 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita a experiência de prévia \"programas baseados em arquivo\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar informações de comentários ao exibir o símbolo.", "configuration.dotnet.server.componentPaths": "Permite substituir o caminho da pasta para componentes internos do servidor de linguagem (por exemplo, substituir o caminho .roslynDevKit no diretório de extensão para usar componentes compilados localmente)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Substitui o caminho da pasta para o componente do Kit de Desenvolvimento do Razor do servidor de linguagem", + "configuration.dotnet.server.componentPaths.razorExtension": "Substitui o caminho da pasta para o componente de extensão Razor do servidor de linguagem", "configuration.dotnet.server.componentPaths.roslynCopilot": "Substitui o caminho da pasta para o componente .roslynCopilot do servidor de idiomas", "configuration.dotnet.server.componentPaths.roslynDevKit": "Substitui o caminho da pasta para o componente .roslynDevKit do servidor de linguagem", "configuration.dotnet.server.componentPaths.xamlTools": "Substitui o caminho da pasta para o componente .xamlTools do servidor de linguagem", diff --git a/package.nls.ru.json b/package.nls.ru.json index f8f6a2f242..1a7018c80a 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Включает предварительный просмотр \"программ на основе файлов\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Показывать примечания при отображении символа.", "configuration.dotnet.server.componentPaths": "Позволяет переопределить путь к папке для встроенных компонентов языкового сервера (например, переопределить путь .roslynDevKit в каталоге расширения для использования локально созданных компонентов).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Переопределяет путь к папке для компонента Razor Dev Kit языкового сервера", + "configuration.dotnet.server.componentPaths.razorExtension": "Переопределяет путь к папке для компонента расширения Razor языкового сервера", "configuration.dotnet.server.componentPaths.roslynCopilot": "Переопределяет путь к папке для компонента .roslynCopilot языкового сервера", "configuration.dotnet.server.componentPaths.roslynDevKit": "Переопределяет путь к папке для компонента .roslynDevKit языкового сервера.", "configuration.dotnet.server.componentPaths.xamlTools": "Переопределяет путь к папке для компонента .xamlTools языкового сервера.", diff --git a/package.nls.tr.json b/package.nls.tr.json index a411cd7067..99ac9f5a44 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "\"Dosya tabanlı programlar\" (dotnet run app.cs) önizleme deneyimini etkinleştirir.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Simge görüntülendiğinde açıklama bilgilerini göster.", "configuration.dotnet.server.componentPaths": "Dil sunucusundaki yerleşik bileşenlerin klasör yolunu geçersiz kılmaya olanak tanır (örneğin, yerel olarak oluşturulan bileşenleri kullanmak için uzantı dizinindeki .roslynDevKit yolunu geçersiz kılın)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Dil sunucusundaki Razor Geliştirme Paketi bileşeninin klasör yolunu geçersiz kılar", + "configuration.dotnet.server.componentPaths.razorExtension": "Dil sunucusundaki Razor uzantısı bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynCopilot": "Dil sunucusunun .roslynCopilot bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynDevKit": "Dil sunucusundaki .roslynDevKit bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.xamlTools": "Dil sunucusundaki .xamlTools bileşeninin klasör yolunu geçersiz kılar", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 885fa2f58e..419f5ac4d1 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "启用预览“基于文件的程序”(dotnet run app.cs)体验。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "显示符号时显示备注信息。", "configuration.dotnet.server.componentPaths": "允许替代语言服务器内置组件的文件夹路径(例如,替代扩展目录中的 .roslynDevKit 路径以使用本地生成的组件)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "替代语言服务器的 Razor 开发工具包组件的文件夹路径", + "configuration.dotnet.server.componentPaths.razorExtension": "替代语言服务器的 Razor 扩展组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynCopilot": "替代语言服务器的 .roslynCopilot 组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynDevKit": "替代语言服务器的 .roslynDevKit 组件的文件夹路径", "configuration.dotnet.server.componentPaths.xamlTools": "替代语言服务器的 .xamlTools 组件的文件夹路径", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 9cda6e9072..6890d5296a 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "啟用「檔案型程式」 (dotnet run app.cs) 的預覽體驗。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "顯示符號時顯示備註資訊。", "configuration.dotnet.server.componentPaths": "允許覆寫語言伺服器內建元件的資料夾路徑 (例如,覆寫延伸模組目錄中的 .roslynDevKit 路徑,以使用本機建置的元件)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "覆寫語言伺服器 Razor 開發套件元件的資料夾路徑", + "configuration.dotnet.server.componentPaths.razorExtension": "覆寫語言伺服器 Razor 延伸模組元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynCopilot": "覆寫語言伺服器 .roslynCopilot 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynDevKit": "覆寫語言伺服器 .roslynDevKit 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.xamlTools": "覆寫語言伺服器 .xamlTools 元件的資料夾路徑", From b152761a736338adb0ada17528c4e053ccb871ed Mon Sep 17 00:00:00 2001 From: siramvikram Date: Wed, 8 Oct 2025 18:14:22 +0000 Subject: [PATCH 040/105] Update main version --- CHANGELOG.md | 2 ++ version.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 539032a3b0..16272ffc35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +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) +# 2.95.x + # 2.94.x * Add completion for razor components in settings (PR: [#8680](https://github.com/dotnet/vscode-csharp/pull/8680)) * Add copilot instructions (PR: [#8676](https://github.com/dotnet/vscode-csharp/pull/8676)) diff --git a/version.json b/version.json index 7a429fa0e4..6777f550fc 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.94", + "version": "2.95", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From aeaf3286ab1dffc4415ef936674d3092c76ca721 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 8 Oct 2025 18:28:33 +0000 Subject: [PATCH 041/105] Localization result of 5d7fb3215f261315d2155610b2433f41332572df. --- package.nls.es.json | 4 ++-- package.nls.fr.json | 4 ++-- package.nls.ja.json | 4 ++-- package.nls.ko.json | 4 ++-- package.nls.pt-br.json | 4 ++-- package.nls.ru.json | 4 ++-- package.nls.tr.json | 4 ++-- package.nls.zh-cn.json | 4 ++-- package.nls.zh-tw.json | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.nls.es.json b/package.nls.es.json index 6d2c249d7e..4aa159049c 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita la experiencia de vista previa de \"programas basados en archivos\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar información de comentarios cuando se muestra el símbolo.", "configuration.dotnet.server.componentPaths": "Permite invalidar la ruta de acceso de carpeta para los componentes integrados del servidor de lenguaje (por ejemplo, invalidar la ruta de acceso .roslynDevKit en el directorio de extensión para usar componentes compilados localmente).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Invalida la ruta de acceso de la carpeta para el componente Razor Dev Kit del servidor de lenguaje", + "configuration.dotnet.server.componentPaths.razorExtension": "Invalida la ruta de acceso de la carpeta para el componente de extensión Razor del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynCopilot": "Invalida la ruta de acceso de la carpeta para el componente .roslynCopilot del servidor de lenguaje", "configuration.dotnet.server.componentPaths.roslynDevKit": "Invalida la ruta de acceso de la carpeta para el componente .roslynDevKit del servidor de lenguaje.", "configuration.dotnet.server.componentPaths.xamlTools": "Invalida la ruta de acceso de la carpeta para el componente .xamlTools del servidor de lenguaje.", diff --git a/package.nls.fr.json b/package.nls.fr.json index c23e5ae650..d9f8a18e40 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Active l’expérience de prévisualisation des « programmes basés sur des fichiers » (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Afficher les informations sur les remarques lors de l’affichage du symbole.", "configuration.dotnet.server.componentPaths": "Permet de remplacer le chemin d’accès au dossier des composants intégrés du serveur de langage (par exemple, remplacer le chemin d’accès .roslynDevKit dans le répertoire d’extension pour utiliser les composants générés localement).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Remplace le chemin d’accès du dossier pour le composant du Kit de développement Razor du serveur de langage", + "configuration.dotnet.server.componentPaths.razorExtension": "Remplace le chemin d’accès du dossier pour le composant d’extension Razor du serveur de langage", "configuration.dotnet.server.componentPaths.roslynCopilot": "Remplace le chemin d’accès du dossier pour le composant .roslynCopilot du serveur de langage", "configuration.dotnet.server.componentPaths.roslynDevKit": "Remplace le chemin d’accès au dossier du composant .roslynDevKit du serveur de langage", "configuration.dotnet.server.componentPaths.xamlTools": "Remplace le chemin d’accès du dossier pour le composant .xamlTools du serveur de langage", diff --git a/package.nls.ja.json b/package.nls.ja.json index f54264d384..661b43dd1a 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "プレビューの \"ファイル ベースのプログラム\" (dotnet run app.cs) エクスペリエンスを有効にします。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "シンボルを表示するときに注釈情報を表示します。", "configuration.dotnet.server.componentPaths": "言語サーバーの組み込みコンポーネントのフォルダー パスをオーバーライドできます (たとえば、ローカルにビルドされたコンポーネントを使用するように拡張ディレクトリの .roslynDevKit パスをオーバーライドする)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "言語サーバーの Razor Dev Kit コンポーネントのフォルダー パスを上書きします", + "configuration.dotnet.server.componentPaths.razorExtension": "言語サーバーの Razor 拡張機能コンポーネントのフォルダー パスを上書きします", "configuration.dotnet.server.componentPaths.roslynCopilot": "言語サーバーの .roslynCopilot コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.roslynDevKit": "言語サーバーの .roslynDevKit コンポーネントのフォルダー パスをオーバーライドします", "configuration.dotnet.server.componentPaths.xamlTools": "言語サーバーの .xamlTools コンポーネントのフォルダー パスをオーバーライドします", diff --git a/package.nls.ko.json b/package.nls.ko.json index ff4fa483c0..fd74ce02cc 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "미리 보기 \"파일 기반 프로그램\"(dotnet run app.cs) 환경을 활성화합니다.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "기호를 표시할 때 설명 정보를 표시합니다.", "configuration.dotnet.server.componentPaths": "언어 서버의 기본 제공 구성 요소에 대한 폴더 경로를 재정의할 수 있습니다(예: 로컬로 빌드된 구성 요소를 사용하도록 확장 디렉터리의 .roslynDevKit 경로 재정의).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "언어 서버의 Razor Dev Kit 구성 요소에 대한 폴더 경로를 재정의합니다.", + "configuration.dotnet.server.componentPaths.razorExtension": "언어 서버의 Razor 확장 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.roslynCopilot": "언어 서버의 .roslynCopilot 구성 요소에 대한 폴더 경로를 덮어씁니다.", "configuration.dotnet.server.componentPaths.roslynDevKit": "언어 서버의 .roslynDevKit 구성 요소에 대한 폴더 경로를 재정의합니다.", "configuration.dotnet.server.componentPaths.xamlTools": "언어 서버의 .xamlTools 구성 요소에 대한 폴더 경로를 재정의합니다.", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 3732b1d020..4eb622bbed 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Habilita a experiência de prévia \"programas baseados em arquivo\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostrar informações de comentários ao exibir o símbolo.", "configuration.dotnet.server.componentPaths": "Permite substituir o caminho da pasta para componentes internos do servidor de linguagem (por exemplo, substituir o caminho .roslynDevKit no diretório de extensão para usar componentes compilados localmente)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Substitui o caminho da pasta para o componente do Kit de Desenvolvimento do Razor do servidor de linguagem", + "configuration.dotnet.server.componentPaths.razorExtension": "Substitui o caminho da pasta para o componente de extensão Razor do servidor de linguagem", "configuration.dotnet.server.componentPaths.roslynCopilot": "Substitui o caminho da pasta para o componente .roslynCopilot do servidor de idiomas", "configuration.dotnet.server.componentPaths.roslynDevKit": "Substitui o caminho da pasta para o componente .roslynDevKit do servidor de linguagem", "configuration.dotnet.server.componentPaths.xamlTools": "Substitui o caminho da pasta para o componente .xamlTools do servidor de linguagem", diff --git a/package.nls.ru.json b/package.nls.ru.json index f8f6a2f242..1a7018c80a 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Включает предварительный просмотр \"программ на основе файлов\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Показывать примечания при отображении символа.", "configuration.dotnet.server.componentPaths": "Позволяет переопределить путь к папке для встроенных компонентов языкового сервера (например, переопределить путь .roslynDevKit в каталоге расширения для использования локально созданных компонентов).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Переопределяет путь к папке для компонента Razor Dev Kit языкового сервера", + "configuration.dotnet.server.componentPaths.razorExtension": "Переопределяет путь к папке для компонента расширения Razor языкового сервера", "configuration.dotnet.server.componentPaths.roslynCopilot": "Переопределяет путь к папке для компонента .roslynCopilot языкового сервера", "configuration.dotnet.server.componentPaths.roslynDevKit": "Переопределяет путь к папке для компонента .roslynDevKit языкового сервера.", "configuration.dotnet.server.componentPaths.xamlTools": "Переопределяет путь к папке для компонента .xamlTools языкового сервера.", diff --git a/package.nls.tr.json b/package.nls.tr.json index a411cd7067..99ac9f5a44 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "\"Dosya tabanlı programlar\" (dotnet run app.cs) önizleme deneyimini etkinleştirir.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Simge görüntülendiğinde açıklama bilgilerini göster.", "configuration.dotnet.server.componentPaths": "Dil sunucusundaki yerleşik bileşenlerin klasör yolunu geçersiz kılmaya olanak tanır (örneğin, yerel olarak oluşturulan bileşenleri kullanmak için uzantı dizinindeki .roslynDevKit yolunu geçersiz kılın)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Dil sunucusundaki Razor Geliştirme Paketi bileşeninin klasör yolunu geçersiz kılar", + "configuration.dotnet.server.componentPaths.razorExtension": "Dil sunucusundaki Razor uzantısı bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynCopilot": "Dil sunucusunun .roslynCopilot bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.roslynDevKit": "Dil sunucusundaki .roslynDevKit bileşeninin klasör yolunu geçersiz kılar", "configuration.dotnet.server.componentPaths.xamlTools": "Dil sunucusundaki .xamlTools bileşeninin klasör yolunu geçersiz kılar", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 885fa2f58e..419f5ac4d1 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "启用预览“基于文件的程序”(dotnet run app.cs)体验。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "显示符号时显示备注信息。", "configuration.dotnet.server.componentPaths": "允许替代语言服务器内置组件的文件夹路径(例如,替代扩展目录中的 .roslynDevKit 路径以使用本地生成的组件)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "替代语言服务器的 Razor 开发工具包组件的文件夹路径", + "configuration.dotnet.server.componentPaths.razorExtension": "替代语言服务器的 Razor 扩展组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynCopilot": "替代语言服务器的 .roslynCopilot 组件的文件夹路径", "configuration.dotnet.server.componentPaths.roslynDevKit": "替代语言服务器的 .roslynDevKit 组件的文件夹路径", "configuration.dotnet.server.componentPaths.xamlTools": "替代语言服务器的 .xamlTools 组件的文件夹路径", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 9cda6e9072..6890d5296a 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "啟用「檔案型程式」 (dotnet run app.cs) 的預覽體驗。", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "顯示符號時顯示備註資訊。", "configuration.dotnet.server.componentPaths": "允許覆寫語言伺服器內建元件的資料夾路徑 (例如,覆寫延伸模組目錄中的 .roslynDevKit 路徑,以使用本機建置的元件)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "覆寫語言伺服器 Razor 開發套件元件的資料夾路徑", + "configuration.dotnet.server.componentPaths.razorExtension": "覆寫語言伺服器 Razor 延伸模組元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynCopilot": "覆寫語言伺服器 .roslynCopilot 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.roslynDevKit": "覆寫語言伺服器 .roslynDevKit 元件的資料夾路徑", "configuration.dotnet.server.componentPaths.xamlTools": "覆寫語言伺服器 .xamlTools 元件的資料夾路徑", From 68860e063e8c01cd139ec97f52e2f983eec6bb8b Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Sun, 12 Oct 2025 12:14:01 +0000 Subject: [PATCH 042/105] Localization result of 4ada4e385cbbe57dc48513ef2800d0fba4d07a79. --- package.nls.cs.json | 4 ++-- package.nls.de.json | 4 ++-- package.nls.it.json | 4 ++-- package.nls.pl.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.nls.cs.json b/package.nls.cs.json index 5d2093feb8..e72714a742 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Umožňuje využívat prostředí „programů založených na souborech“ (dotnet run app.cs) ve verzi Preview.", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Zobrazit informace o poznámkách při zobrazení symbolu.", "configuration.dotnet.server.componentPaths": "Umožňuje přepsat cestu ke složce pro integrované komponenty jazykového serveru (například přepsat cestu .roslynDevKit v adresáři rozšíření tak, aby používala místně sestavené komponenty).", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Přepíše cestu ke složce pro komponentu Razor Dev Kit jazykového serveru", + "configuration.dotnet.server.componentPaths.razorExtension": "Přepíše cestu ke složce pro komponentu rozšíření Razor jazykového serveru", "configuration.dotnet.server.componentPaths.roslynCopilot": "Přepíše cestu ke složce pro komponentu .roslynCopilot jazykového serveru.", "configuration.dotnet.server.componentPaths.roslynDevKit": "Přepíše cestu ke složce pro komponentu .roslynDevKit jazykového serveru.", "configuration.dotnet.server.componentPaths.xamlTools": "Přepíše cestu ke složce pro komponentu .xamlTools jazykového serveru.", diff --git a/package.nls.de.json b/package.nls.de.json index 0f03515996..e50cdc6477 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Aktiviert die Vorschau für die Erfahrung „dateibasierte Programme“ (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Beschreibungsinformationen beim Anzeigen des Symbols anzeigen.", "configuration.dotnet.server.componentPaths": "Ermöglicht das Überschreiben des Ordnerpfads für eingebaute Komponenten des Sprachservers (z. B. Überschreiben des Pfads .roslynDevKit im Erweiterungsverzeichnis, um lokal erstellte Komponenten zu verwenden)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Überschreibt den Ordnerpfad für die Razor-Dev-Kit-Komponente des Sprachservers", + "configuration.dotnet.server.componentPaths.razorExtension": "Überschreibt den Ordnerpfad für die Razor-Erweiterungskomponente des Sprachservers", "configuration.dotnet.server.componentPaths.roslynCopilot": "Überschreibt den Ordnerpfad für die .roslynCopilot-Komponente des Sprachservers", "configuration.dotnet.server.componentPaths.roslynDevKit": "Überschreibt den Ordnerpfad für die Komponente .roslynDevKit des Sprachservers", "configuration.dotnet.server.componentPaths.xamlTools": "Überschreibt den Ordnerpfad für die Komponente .xamlTools des Sprachservers", diff --git a/package.nls.it.json b/package.nls.it.json index c88bd3fff9..328f36d6e6 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Abilita l'esperienza di anteprima di \"programmi basati su file\" (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Mostra le informazioni sulle note quando viene visualizzato il simbolo.", "configuration.dotnet.server.componentPaths": "Consente di eseguire l'override del percorso della cartella per i componenti predefiniti del server di linguaggio (ad esempio, eseguire l'override del percorso .roslynDevKit nella directory delle estensioni per usare componenti compilati in locale)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Esegue l'override del percorso della cartella per il componente Razor Dev Kit del server di linguaggio", + "configuration.dotnet.server.componentPaths.razorExtension": "Esegue l'override del percorso della cartella per il componente di estensione Razor del server di linguaggio", "configuration.dotnet.server.componentPaths.roslynCopilot": "Esegue l'override del percorso della cartella per il componente roslynCopilot del server di linguaggio", "configuration.dotnet.server.componentPaths.roslynDevKit": "Esegue l'override del percorso della cartella per il componente .roslynDevKit del server di linguaggio", "configuration.dotnet.server.componentPaths.xamlTools": "Esegue l'override del percorso della cartella per il componente .xamlTools del server di linguaggio", diff --git a/package.nls.pl.json b/package.nls.pl.json index b78f221e02..bdb6666e81 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -65,8 +65,8 @@ "configuration.dotnet.projects.enableFileBasedPrograms": "Włącza podgląd środowiska „programy oparte na plikach” (dotnet run app.cs).", "configuration.dotnet.quickInfo.showRemarksInQuickInfo": "Pokaż informacje o uwagach podczas wyświetlania symbolu.", "configuration.dotnet.server.componentPaths": "Umożliwia zastąpienie ścieżki folderu dla wbudowanych składników serwera języka (na przykład przesłonięcie ścieżki roslynDevKit w katalogu rozszerzenia w celu użycia składników skompilowanych lokalnie)", - "configuration.dotnet.server.componentPaths.razorDevKit": "Overrides the folder path for the Razor Dev Kit component of the language server", - "configuration.dotnet.server.componentPaths.razorExtension": "Overrides the folder path for the Razor extension component of the language server", + "configuration.dotnet.server.componentPaths.razorDevKit": "Zastępuje ścieżkę folderu składnika Razor Dev Kit serwera języka", + "configuration.dotnet.server.componentPaths.razorExtension": "Zastępuje ścieżkę folderu składnika rozszerzenia Razor serwera języka", "configuration.dotnet.server.componentPaths.roslynCopilot": "Przesłania ścieżkę folderu dla składnika .roslynCopilot serwera językowego", "configuration.dotnet.server.componentPaths.roslynDevKit": "Przesłania ścieżkę folderu dla składnika roslynDevKit serwera językowego", "configuration.dotnet.server.componentPaths.xamlTools": "Zastępuje ścieżkę folderu dla składnika xamlTools serwera języka", From 33de9a49ea820804014f97f3387cdef9e7bf5029 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 13 Oct 2025 13:15:58 +1100 Subject: [PATCH 043/105] Bump Razor to 10.0.0-preview.25512.6 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16272ffc35..620504ecad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.95.x +* Bump Razor to 10.0.0-preview.25512.6 (PR: [#8694](https://github.com/dotnet/vscode-csharp/pull/8694)) + * Provide a way for users to turn on logging for formatting, to help resolve bugs (PR: [#12304](https://github.com/dotnet/razor/pull/12304)) + * Handle diagnostic spans that cover an entire attribute value (PR: [#12302](https://github.com/dotnet/razor/pull/12302)) + * Map component start tags to C#, for better GTD, FAR, Hover, etc. (PR: [#12287](https://github.com/dotnet/razor/pull/12287)) # 2.94.x * Add completion for razor components in settings (PR: [#8680](https://github.com/dotnet/vscode-csharp/pull/8680)) diff --git a/package.json b/package.json index 5280275c89..1a196353c1 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "defaults": { "roslyn": "5.1.0-1.25506.3", "omniSharp": "1.39.14", - "razor": "10.0.0-preview.25503.1", + "razor": "10.0.0-preview.25512.6", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "18.0.11023.10" }, From f7a6641bdbf45b251c31e5c14f45cad0f331f0ea Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Mon, 13 Oct 2025 18:01:29 +0000 Subject: [PATCH 044/105] Update RoslynCopilot version to 18.0.898-alpha --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5280275c89..73c0fccff3 100644 --- a/package.json +++ b/package.json @@ -405,7 +405,7 @@ { "id": "RoslynCopilot", "description": "Language server for Roslyn Copilot integration", - "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.797-alpha.zip", + "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.898-alpha.zip", "installPath": ".roslynCopilot", "platforms": [ "neutral" @@ -414,7 +414,7 @@ "neutral" ], "installTestPath": "./.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll", - "integrity": "168DC3B3757B5F58DD35E27820949CA8AF4B890BE92D1A0CA6461A3A62E9D0A4" + "integrity": "44FC523F2B3FA451327147C53E2FA0D7BA2C438B1A901EAEC32E004FBFA731B4" }, { "id": "Debugger", From 35fe1e06cadc4dbd183a48c37cb90776b782301d Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 13 Oct 2025 13:09:46 -0700 Subject: [PATCH 045/105] Update Roslyn to 5.3.0-1.25513.2 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 620504ecad..5b7fabe77c 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) # 2.95.x +* Bump Roslyn to 5.3.0-1.25513.2 (PR: [#8697](https://github.com/dotnet/vscode-csharp/pull/8697)) + * Restore fully qualify for Razor (PR: [#80674](https://github.com/dotnet/roslyn/pull/80674)) + * Improve diagnostic quality for less accessible base type argument (PR: [#80483](https://github.com/dotnet/roslyn/pull/80483)) + * Build BuildHost against net8.0 (PR: [#80641](https://github.com/dotnet/roslyn/pull/80641)) + * Add completion for directives in file based programs (PR: [#80410](https://github.com/dotnet/roslyn/pull/80410)) * Bump Razor to 10.0.0-preview.25512.6 (PR: [#8694](https://github.com/dotnet/vscode-csharp/pull/8694)) * Provide a way for users to turn on logging for formatting, to help resolve bugs (PR: [#12304](https://github.com/dotnet/razor/pull/12304)) * Handle diagnostic spans that cover an entire attribute value (PR: [#12302](https://github.com/dotnet/razor/pull/12302)) diff --git a/package.json b/package.json index fe16562b1e..be9ea81442 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "workspace" ], "defaults": { - "roslyn": "5.1.0-1.25506.3", + "roslyn": "5.3.0-1.25513.2", "omniSharp": "1.39.14", "razor": "10.0.0-preview.25512.6", "razorOmnisharp": "7.0.0-preview.23363.1", From c08e7a2d4bbbff57899a498b2c54d0f2841cc747 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 14 Oct 2025 16:04:37 -0700 Subject: [PATCH 046/105] Update roslyn --- CHANGELOG.md | 4 +++- package.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b7fabe77c..fde457359d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,9 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.95.x -* Bump Roslyn to 5.3.0-1.25513.2 (PR: [#8697](https://github.com/dotnet/vscode-csharp/pull/8697)) +* Bump Roslyn to 5.3.0-1.25514.3 (PR: [#8700](https://github.com/dotnet/vscode-csharp/pull/8700)) + * Ensure `LspWorkspaceManager` returns solutions without misc document when file moved(PR: [#80535](https://github.com/dotnet/roslyn/pull/80535)) + * Add limited support for binarylogger to MSBuildWorkspace(PR: [#80120](https://github.com/dotnet/roslyn/pull/80120)) * Restore fully qualify for Razor (PR: [#80674](https://github.com/dotnet/roslyn/pull/80674)) * Improve diagnostic quality for less accessible base type argument (PR: [#80483](https://github.com/dotnet/roslyn/pull/80483)) * Build BuildHost against net8.0 (PR: [#80641](https://github.com/dotnet/roslyn/pull/80641)) diff --git a/package.json b/package.json index be9ea81442..73df0012a3 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "workspace" ], "defaults": { - "roslyn": "5.3.0-1.25513.2", + "roslyn": "5.3.0-1.25514.3", "omniSharp": "1.39.14", "razor": "10.0.0-preview.25512.6", "razorOmnisharp": "7.0.0-preview.23363.1", From aae85f8d12bce4f31a036c5ee6f518c3bb2a3284 Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Wed, 15 Oct 2025 05:01:52 +0000 Subject: [PATCH 047/105] Update main CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fde457359d..071b6cdbf7 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) # 2.95.x +* Update Roslyn to 5.3.0-1.25513.2 (PR: [#8697](https://github.com/dotnet/vscode-csharp/pull/8697)) +* Update RoslynCopilot url to 18.0.898-alpha (PR: [#8696](https://github.com/dotnet/vscode-csharp/pull/8696)) * Bump Roslyn to 5.3.0-1.25514.3 (PR: [#8700](https://github.com/dotnet/vscode-csharp/pull/8700)) * Ensure `LspWorkspaceManager` returns solutions without misc document when file moved(PR: [#80535](https://github.com/dotnet/roslyn/pull/80535)) * Add limited support for binarylogger to MSBuildWorkspace(PR: [#80120](https://github.com/dotnet/roslyn/pull/80120)) From 8848f19fb54bc6989563217715d156e59dd6aaa0 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 06:34:04 -0700 Subject: [PATCH 048/105] Update changelog --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 071b6cdbf7..09a644f053 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,6 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.95.x -* Update Roslyn to 5.3.0-1.25513.2 (PR: [#8697](https://github.com/dotnet/vscode-csharp/pull/8697)) * Update RoslynCopilot url to 18.0.898-alpha (PR: [#8696](https://github.com/dotnet/vscode-csharp/pull/8696)) * Bump Roslyn to 5.3.0-1.25514.3 (PR: [#8700](https://github.com/dotnet/vscode-csharp/pull/8700)) * Ensure `LspWorkspaceManager` returns solutions without misc document when file moved(PR: [#80535](https://github.com/dotnet/roslyn/pull/80535)) From 95072b1ae5d0f05acf00a8d4e458fec2b859a4f8 Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Wed, 15 Oct 2025 17:51:37 +0200 Subject: [PATCH 049/105] Update RoslynCopilot url to 18.0.904-alpha (#8699) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 73df0012a3..a08d4cc233 100644 --- a/package.json +++ b/package.json @@ -405,7 +405,7 @@ { "id": "RoslynCopilot", "description": "Language server for Roslyn Copilot integration", - "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.898-alpha.zip", + "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.904-alpha.zip", "installPath": ".roslynCopilot", "platforms": [ "neutral" @@ -414,7 +414,7 @@ "neutral" ], "installTestPath": "./.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll", - "integrity": "44FC523F2B3FA451327147C53E2FA0D7BA2C438B1A901EAEC32E004FBFA731B4" + "integrity": "0BD733B23A706226F2B429AB0CE35576FB474493C8E19C7B88311007876DE5CC" }, { "id": "Debugger", From 28b16ed148eed5c90286eeddd747a60300e18127 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:02:06 +0000 Subject: [PATCH 050/105] Initial plan From 1e178d6fe719945896b10d1243703602dd363191 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:11:32 +0000 Subject: [PATCH 051/105] Add isOptional field to packages and handle optional package failures Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- src/packageManager/IPackage.ts | 1 + src/packageManager/absolutePathPackage.ts | 6 +- .../downloadAndInstallPackages.ts | 5 ++ .../downloadAndInstallPackages.test.ts | 73 +++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/packageManager/IPackage.ts b/src/packageManager/IPackage.ts index 91d0d826dc..2ede628b38 100644 --- a/src/packageManager/IPackage.ts +++ b/src/packageManager/IPackage.ts @@ -13,4 +13,5 @@ export interface IPackage { platformId?: string; integrity?: string; isFramework?: boolean; + isOptional?: boolean; } diff --git a/src/packageManager/absolutePathPackage.ts b/src/packageManager/absolutePathPackage.ts index 5505dc43eb..578ff2d1e3 100644 --- a/src/packageManager/absolutePathPackage.ts +++ b/src/packageManager/absolutePathPackage.ts @@ -20,7 +20,8 @@ export class AbsolutePathPackage implements IPackage { public fallbackUrl?: string, public platformId?: string, public integrity?: string, - public isFramework?: boolean + public isFramework?: boolean, + public isOptional?: boolean ) {} public static getAbsolutePathPackage(pkg: Package, extensionPath: string) { @@ -36,7 +37,8 @@ export class AbsolutePathPackage implements IPackage { pkg.fallbackUrl, pkg.platformId, pkg.integrity, - pkg.isFramework + pkg.isFramework, + pkg.isOptional ); } } diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index a148a666e4..eccfdbf830 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -61,6 +61,11 @@ export async function downloadAndInstallPackages( eventStream.post(new InstallationFailure(installationStage, error)); } + // If the package is optional, log and continue with the next package + if (pkg.isOptional) { + continue; + } + return false; } finally { try { diff --git a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 9d8854a2bf..0d8cff9006 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -218,6 +218,79 @@ describe(`${downloadAndInstallPackages.name}`, () => { }); }); + describe('Optional packages', () => { + test('Returns true and continues when an optional package fails to download', async () => { + const optionalPackage = [ + { + url: `${server.baseUrl}/notDownloadablePackage`, + description: 'Optional Package', + installPath: new AbsolutePath(tmpDirPath), + isOptional: true, + }, + ]; + + const result = await downloadAndInstallPackages( + optionalPackage, + networkSettingsProvider, + eventStream, + downloadValidator + ); + expect(result).toBe(true); + }); + + test('Continues to install remaining packages after optional package fails', async () => { + const tmpInstallDir2 = await CreateTmpDir(true); + const mixedPackages = [ + { + url: `${server.baseUrl}/notDownloadablePackage`, + description: 'Optional Package', + installPath: new AbsolutePath(tmpDirPath), + isOptional: true, + }, + { + url: `${server.baseUrl}/downloadablePackage`, + description: packageDescription, + installPath: new AbsolutePath(tmpInstallDir2.name), + }, + ]; + + const result = await downloadAndInstallPackages( + mixedPackages, + networkSettingsProvider, + eventStream, + downloadValidator + ); + expect(result).toBe(true); + expect(await util.fileExists(path.join(tmpInstallDir2.name, 'install.Lock'))).toBe(true); + tmpInstallDir2.dispose(); + }); + + test('InstallationFailure event is logged for optional package', async () => { + const optionalPackage = [ + { + url: `${server.baseUrl}/notDownloadablePackage`, + description: 'Optional Package', + installPath: new AbsolutePath(tmpDirPath), + isOptional: true, + }, + ]; + + eventBus.getEvents(); // Clear any previous events + await downloadAndInstallPackages( + optionalPackage, + networkSettingsProvider, + eventStream, + downloadValidator + ); + const obtainedEvents = eventBus.getEvents(); + const installationFailureEvent = obtainedEvents.find( + (event) => event instanceof InstallationFailure + ) as InstallationFailure; + expect(installationFailureEvent).toBeDefined(); + expect(installationFailureEvent.stage).toEqual('downloadPackage'); + }); + }); + afterEach(async () => { if (tmpInstallDir) { tmpInstallDir.dispose(); From 1ffa0e09066bde0a58f33c2915e63622e58361e2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:13:52 +0000 Subject: [PATCH 052/105] Fix linting formatting Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- .../packages/downloadAndInstallPackages.test.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 0d8cff9006..9be17a0f4b 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -276,12 +276,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { ]; eventBus.getEvents(); // Clear any previous events - await downloadAndInstallPackages( - optionalPackage, - networkSettingsProvider, - eventStream, - downloadValidator - ); + await downloadAndInstallPackages(optionalPackage, networkSettingsProvider, eventStream, downloadValidator); const obtainedEvents = eventBus.getEvents(); const installationFailureEvent = obtainedEvents.find( (event) => event instanceof InstallationFailure From e0152c9f78342a59c86f73087180d06ea559e6b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:10:15 +0000 Subject: [PATCH 053/105] Add telemetry reporting for optional package installation failures Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- .gitignore | 1 + src/main.ts | 2 +- src/omnisharp/omnisharpDownloader.ts | 3 +- .../downloadAndInstallPackages.ts | 22 ++++++++++++ src/razor/razorOmnisharpDownloader.ts | 3 +- tasks/offlinePackagingTasks.ts | 4 ++- .../downloadAndInstallPackages.test.ts | 35 +++++++++++++------ 7 files changed, 56 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 291b7b01bb..0dea598e3e 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ coverage/ \.DS_Store vsix/ +*.bak diff --git a/src/main.ts b/src/main.ts index 977e415f5f..b001f2eb35 100644 --- a/src/main.ts +++ b/src/main.ts @@ -86,7 +86,7 @@ export async function activate( const networkSettingsProvider = vscodeNetworkSettingsProvider(vscode); const useFramework = useOmnisharpServer && omnisharpOptions.useModernNet !== true; const installDependencies: IInstallDependencies = async (dependencies: AbsolutePathPackage[]) => - downloadAndInstallPackages(dependencies, networkSettingsProvider, eventStream, isValidDownload); + downloadAndInstallPackages(dependencies, networkSettingsProvider, eventStream, isValidDownload, reporter); const runtimeDependenciesExist = await installRuntimeDependencies( context.extension.packageJSON, diff --git a/src/omnisharp/omnisharpDownloader.ts b/src/omnisharp/omnisharpDownloader.ts index 03be20748f..e90dc61662 100644 --- a/src/omnisharp/omnisharpDownloader.ts +++ b/src/omnisharp/omnisharpDownloader.ts @@ -56,7 +56,8 @@ export class OmnisharpDownloader { packagesToInstall, this.networkSettingsProvider, this.eventStream, - isValidDownload + isValidDownload, + undefined ) ) { this.eventStream.post(new InstallationSuccess()); diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index eccfdbf830..ce1853f205 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -16,12 +16,14 @@ import { mkdirpSync } from 'fs-extra'; import { PackageInstallStart } from '../shared/loggingEvents'; import { DownloadValidator } from './isValidDownload'; import { CancellationToken } from 'vscode'; +import { ITelemetryReporter } from '../shared/telemetryReporter'; export async function downloadAndInstallPackages( packages: AbsolutePathPackage[], provider: NetworkSettingsProvider, eventStream: EventStream, downloadValidator: DownloadValidator, + telemetryReporter?: ITelemetryReporter, token?: CancellationToken ): Promise { eventStream.post(new PackageInstallStart()); @@ -61,6 +63,26 @@ export async function downloadAndInstallPackages( eventStream.post(new InstallationFailure(installationStage, error)); } + // Send telemetry for the failure + if (telemetryReporter) { + const telemetryProperties: { [key: string]: string } = { + installStage: installationStage, + packageId: pkg.id, + isOptional: pkg.isOptional ? 'true' : 'false', + }; + + if (error instanceof NestedError && error.err instanceof PackageError) { + telemetryProperties['error.message'] = error.err.message; + telemetryProperties['error.packageUrl'] = error.err.pkg.url; + } else if (error instanceof PackageError) { + telemetryProperties['error.message'] = error.message; + telemetryProperties['error.packageUrl'] = error.pkg.url; + } + + const eventName = pkg.isOptional ? 'OptionalPackageInstallationFailed' : 'PackageInstallationFailed'; + telemetryReporter.sendTelemetryEvent(eventName, telemetryProperties); + } + // If the package is optional, log and continue with the next package if (pkg.isOptional) { continue; diff --git a/src/razor/razorOmnisharpDownloader.ts b/src/razor/razorOmnisharpDownloader.ts index 965f7cf99a..e87b0e3fcb 100644 --- a/src/razor/razorOmnisharpDownloader.ts +++ b/src/razor/razorOmnisharpDownloader.ts @@ -38,7 +38,8 @@ export class RazorOmnisharpDownloader { packagesToInstall, this.networkSettingsProvider, this.eventStream, - isValidDownload + isValidDownload, + undefined ) ) { this.eventStream.post(new InstallationSuccess()); diff --git a/tasks/offlinePackagingTasks.ts b/tasks/offlinePackagingTasks.ts index 531e0b7adf..fb9714b4c9 100644 --- a/tasks/offlinePackagingTasks.ts +++ b/tasks/offlinePackagingTasks.ts @@ -280,7 +280,9 @@ async function installPackageJsonDependency( codeExtensionPath ); const provider = () => new NetworkSettings('', true); - if (!(await downloadAndInstallPackages(packagesToInstall, provider, eventStream, isValidDownload, token))) { + if ( + !(await downloadAndInstallPackages(packagesToInstall, provider, eventStream, isValidDownload, undefined, token)) + ) { throw Error('Failed to download package.'); } } diff --git a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 9be17a0f4b..33647e8f90 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -87,7 +87,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); for (const elem of testZip.files) { const filePath = path.join(tmpDirPath, elem.path); @@ -100,7 +101,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(await util.fileExists(path.join(tmpDirPath, 'install.Lock'))).toBe(true); }); @@ -119,7 +121,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(eventBus.getEvents()).toStrictEqual(eventsSequence); }); @@ -153,7 +156,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(eventBus.getEvents()).toStrictEqual(eventsSequence); }); @@ -180,7 +184,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(eventBus.getEvents()).toStrictEqual(eventsSequence); }); @@ -196,7 +201,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { notDownloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); const obtainedEvents = eventBus.getEvents(); expect(obtainedEvents[0]).toStrictEqual(eventsSequence[0]); @@ -212,7 +218,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { notDownloadablePackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(await util.fileExists(path.join(tmpDirPath, 'install.Lock'))).toBe(false); }); @@ -233,7 +240,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { optionalPackage, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(result).toBe(true); }); @@ -258,7 +266,8 @@ describe(`${downloadAndInstallPackages.name}`, () => { mixedPackages, networkSettingsProvider, eventStream, - downloadValidator + downloadValidator, + undefined ); expect(result).toBe(true); expect(await util.fileExists(path.join(tmpInstallDir2.name, 'install.Lock'))).toBe(true); @@ -276,7 +285,13 @@ describe(`${downloadAndInstallPackages.name}`, () => { ]; eventBus.getEvents(); // Clear any previous events - await downloadAndInstallPackages(optionalPackage, networkSettingsProvider, eventStream, downloadValidator); + await downloadAndInstallPackages( + optionalPackage, + networkSettingsProvider, + eventStream, + downloadValidator, + undefined + ); const obtainedEvents = eventBus.getEvents(); const installationFailureEvent = obtainedEvents.find( (event) => event instanceof InstallationFailure From 9c0d446966f915bd3c6317b0788b254f7122b38e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:20:41 +0000 Subject: [PATCH 054/105] Handle optional components gracefully when files don't exist Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- src/lsptoolshost/extensions/builtInComponents.ts | 10 +++++++++- src/lsptoolshost/server/roslynLanguageServer.ts | 4 ++-- src/razor/src/extension.ts | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lsptoolshost/extensions/builtInComponents.ts b/src/lsptoolshost/extensions/builtInComponents.ts index af657fa165..9e1868c7d8 100644 --- a/src/lsptoolshost/extensions/builtInComponents.ts +++ b/src/lsptoolshost/extensions/builtInComponents.ts @@ -44,12 +44,20 @@ export const componentInfo: { [key: string]: ComponentInfo } = { }, }; -export function getComponentPaths(componentName: string, options: LanguageServerOptions | undefined): string[] { +export function getComponentPaths( + componentName: string, + options: LanguageServerOptions | undefined, + isOptional = false +): string[] { const component = componentInfo[componentName]; const baseFolder = getComponentFolderPath(component, options); const paths = component.componentDllPaths.map((dllPath) => path.join(baseFolder, dllPath)); for (const dllPath of paths) { if (!fs.existsSync(dllPath)) { + if (isOptional) { + // Component is optional and doesn't exist - return empty array + return []; + } throw new Error(`Component DLL not found: ${dllPath}`); } } diff --git a/src/lsptoolshost/server/roslynLanguageServer.ts b/src/lsptoolshost/server/roslynLanguageServer.ts index 8d1951d1f4..57e18ac69b 100644 --- a/src/lsptoolshost/server/roslynLanguageServer.ts +++ b/src/lsptoolshost/server/roslynLanguageServer.ts @@ -1026,7 +1026,7 @@ export class RoslynLanguageServer { // Also include the Xaml Dev Kit extensions, if enabled. if (languageServerOptions.enableXamlTools) { - getComponentPaths('xamlTools', languageServerOptions).forEach((path) => + getComponentPaths('xamlTools', languageServerOptions, true).forEach((path) => additionalExtensionPaths.push(path) ); } @@ -1096,7 +1096,7 @@ export class RoslynLanguageServer { await exports.setupTelemetryEnvironmentAsync(env); } - getComponentPaths('roslynCopilot', languageServerOptions).forEach((extPath) => { + getComponentPaths('roslynCopilot', languageServerOptions, true).forEach((extPath) => { additionalExtensionPaths.push(extPath); }); } diff --git a/src/razor/src/extension.ts b/src/razor/src/extension.ts index 8fdac6c67b..990a8d380c 100644 --- a/src/razor/src/extension.ts +++ b/src/razor/src/extension.ts @@ -104,7 +104,7 @@ export async function activate( await setupDevKitEnvironment(dotnetInfo.env, csharpDevkitExtension, logger); if (vscode.env.isTelemetryEnabled) { - const razorComponentPaths = getComponentPaths('razorDevKit', undefined); + const razorComponentPaths = getComponentPaths('razorDevKit', undefined, true); if (razorComponentPaths.length !== 1) { logger.logError('Failed to find Razor DevKit telemetry extension path.', undefined); } else { From f611c8a4b746e55ffaa75b0b3ea5eded36cbeefd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 20:02:18 +0000 Subject: [PATCH 055/105] Refactor isOptional to be part of ComponentInfo interface Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- src/lsptoolshost/extensions/builtInComponents.ts | 12 ++++++------ src/lsptoolshost/server/roslynLanguageServer.ts | 4 ++-- src/razor/src/extension.ts | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lsptoolshost/extensions/builtInComponents.ts b/src/lsptoolshost/extensions/builtInComponents.ts index 9e1868c7d8..119aca8bd7 100644 --- a/src/lsptoolshost/extensions/builtInComponents.ts +++ b/src/lsptoolshost/extensions/builtInComponents.ts @@ -11,6 +11,7 @@ interface ComponentInfo { defaultFolderName: string; optionName: string; componentDllPaths: string[]; + isOptional?: boolean; } export const componentInfo: { [key: string]: ComponentInfo } = { @@ -26,11 +27,13 @@ export const componentInfo: { [key: string]: ComponentInfo } = { 'Microsoft.VisualStudio.DesignTools.CodeAnalysis.dll', 'Microsoft.VisualStudio.DesignTools.CodeAnalysis.Diagnostics.dll', ], + isOptional: true, }, razorDevKit: { defaultFolderName: '.razorDevKit', optionName: 'razorDevKit', componentDllPaths: ['Microsoft.VisualStudio.DevKit.Razor.dll'], + isOptional: true, }, razorExtension: { defaultFolderName: '.razorExtension', @@ -41,20 +44,17 @@ export const componentInfo: { [key: string]: ComponentInfo } = { defaultFolderName: '.roslynCopilot', optionName: 'roslynCopilot', componentDllPaths: ['Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll'], + isOptional: true, }, }; -export function getComponentPaths( - componentName: string, - options: LanguageServerOptions | undefined, - isOptional = false -): string[] { +export function getComponentPaths(componentName: string, options: LanguageServerOptions | undefined): string[] { const component = componentInfo[componentName]; const baseFolder = getComponentFolderPath(component, options); const paths = component.componentDllPaths.map((dllPath) => path.join(baseFolder, dllPath)); for (const dllPath of paths) { if (!fs.existsSync(dllPath)) { - if (isOptional) { + if (component.isOptional) { // Component is optional and doesn't exist - return empty array return []; } diff --git a/src/lsptoolshost/server/roslynLanguageServer.ts b/src/lsptoolshost/server/roslynLanguageServer.ts index 57e18ac69b..8d1951d1f4 100644 --- a/src/lsptoolshost/server/roslynLanguageServer.ts +++ b/src/lsptoolshost/server/roslynLanguageServer.ts @@ -1026,7 +1026,7 @@ export class RoslynLanguageServer { // Also include the Xaml Dev Kit extensions, if enabled. if (languageServerOptions.enableXamlTools) { - getComponentPaths('xamlTools', languageServerOptions, true).forEach((path) => + getComponentPaths('xamlTools', languageServerOptions).forEach((path) => additionalExtensionPaths.push(path) ); } @@ -1096,7 +1096,7 @@ export class RoslynLanguageServer { await exports.setupTelemetryEnvironmentAsync(env); } - getComponentPaths('roslynCopilot', languageServerOptions, true).forEach((extPath) => { + getComponentPaths('roslynCopilot', languageServerOptions).forEach((extPath) => { additionalExtensionPaths.push(extPath); }); } diff --git a/src/razor/src/extension.ts b/src/razor/src/extension.ts index 990a8d380c..8fdac6c67b 100644 --- a/src/razor/src/extension.ts +++ b/src/razor/src/extension.ts @@ -104,7 +104,7 @@ export async function activate( await setupDevKitEnvironment(dotnetInfo.env, csharpDevkitExtension, logger); if (vscode.env.isTelemetryEnabled) { - const razorComponentPaths = getComponentPaths('razorDevKit', undefined, true); + const razorComponentPaths = getComponentPaths('razorDevKit', undefined); if (razorComponentPaths.length !== 1) { logger.logError('Failed to find Razor DevKit telemetry extension path.', undefined); } else { From bd12e03ef214890f3c40f116bb11cd261434475f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 20:14:25 +0000 Subject: [PATCH 056/105] Revert .gitignore change that added *.bak Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0dea598e3e..291b7b01bb 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,3 @@ coverage/ \.DS_Store vsix/ -*.bak From 60894e9ebddbd35d82ad9972ae9bf5f42e9569bc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 20:45:52 +0000 Subject: [PATCH 057/105] Thread ITelemetryReporter through OmniSharp components Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- src/omnisharp/omnisharpDownloader.ts | 6 ++++-- src/omnisharp/omnisharpLanguageServer.ts | 9 ++++++--- src/omnisharp/server.ts | 7 +++++-- .../omnisharpUnitTests/omnisharpDownloader.test.ts | 3 ++- .../omnisharpUnitTests/omnisharpManager.test.ts | 3 ++- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/omnisharp/omnisharpDownloader.ts b/src/omnisharp/omnisharpDownloader.ts index e90dc61662..0924284585 100644 --- a/src/omnisharp/omnisharpDownloader.ts +++ b/src/omnisharp/omnisharpDownloader.ts @@ -19,6 +19,7 @@ import { getRuntimeDependenciesPackages } from '../tools/runtimeDependencyPackag import { getAbsolutePathPackagesToInstall } from '../packageManager/getAbsolutePathPackagesToInstall'; import { isValidDownload } from '../packageManager/isValidDownload'; import { LatestBuildDownloadStart } from './omnisharpLoggingEvents'; +import { ITelemetryReporter } from '../shared/telemetryReporter'; export class OmnisharpDownloader { public constructor( @@ -26,7 +27,8 @@ export class OmnisharpDownloader { private eventStream: EventStream, private packageJSON: any, private platformInfo: PlatformInformation, - private extensionPath: string + private extensionPath: string, + private reporter: ITelemetryReporter ) {} public async DownloadAndInstallOmnisharp( @@ -57,7 +59,7 @@ export class OmnisharpDownloader { this.networkSettingsProvider, this.eventStream, isValidDownload, - undefined + this.reporter ) ) { this.eventStream.post(new InstallationSuccess()); diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index 619a10ba1a..2226b49c6c 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -178,7 +178,8 @@ export async function activateOmniSharpLanguageServer( networkSettingsProvider, eventStream, context.extension.extensionPath, - omnisharpChannel + omnisharpChannel, + reporter ); } @@ -189,7 +190,8 @@ async function activate( provider: NetworkSettingsProvider, eventStream: EventStream, extensionPath: string, - outputChannel: vscode.OutputChannel + outputChannel: vscode.OutputChannel, + reporter: ITelemetryReporter ) { const disposables = new CompositeDisposable(); @@ -211,7 +213,8 @@ async function activate( omnisharpDotnetResolver, context, outputChannel, - languageMiddlewareFeature + languageMiddlewareFeature, + reporter ); const advisor = new Advisor(server); // create before server is started const testManager = new TestManager(server, eventStream, languageMiddlewareFeature); diff --git a/src/omnisharp/server.ts b/src/omnisharp/server.ts index bc60e6f8b8..49a2cc879d 100644 --- a/src/omnisharp/server.ts +++ b/src/omnisharp/server.ts @@ -34,6 +34,7 @@ import TestManager from './features/dotnetTest'; import { findLaunchTargets } from './launcher'; import { ProjectConfigurationMessage } from '../shared/projectConfiguration'; import { commonOptions, omnisharpOptions, razorOptions } from '../shared/options'; +import { ITelemetryReporter } from '../shared/telemetryReporter'; enum ServerState { Starting, @@ -117,14 +118,16 @@ export class OmniSharpServer { private dotnetResolver: IHostExecutableResolver, private context: ExtensionContext, private outputChannel: OutputChannel, - private languageMiddlewareFeature: LanguageMiddlewareFeature + private languageMiddlewareFeature: LanguageMiddlewareFeature, + reporter: ITelemetryReporter ) { const downloader = new OmnisharpDownloader( networkSettingsProvider, this.eventStream, this.packageJSON, platformInfo, - extensionPath + extensionPath, + reporter ); this._omnisharpManager = new OmnisharpManager(downloader, platformInfo); this.updateProjectDebouncer.pipe(debounceTime(1500)).subscribe(async (_) => { diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts index 74d2b999f7..6047bbc87f 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts @@ -54,7 +54,8 @@ import { modernNetVersion } from '../../../src/omnisharp/omnisharpPackageCreator eventStream, testPackageJSON, platformInfo, - extensionPath + extensionPath, + undefined as any ); server = await MockHttpsServer.CreateMockHttpsServer(); testZip = await TestZip.createTestZipAsync(createTestFile('Foo', 'foo.txt')); diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts index 78f882771e..586012ca8e 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts @@ -245,7 +245,8 @@ function GetTestOmniSharpManager( eventStream, testPackageJSON, platformInfo, - extensionPath + extensionPath, + undefined as any ); return new OmnisharpManager(downloader, platformInfo, serverUrl); } From e13d0b99a2999fa0f956a193a5d7cbd28554d92d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:49:02 +0000 Subject: [PATCH 058/105] Refactor telemetry and make reporter parameters optional Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- src/omnisharp/omnisharpDownloader.ts | 2 +- src/omnisharp/omnisharpLanguageServer.ts | 3 +- .../downloadAndInstallPackages.ts | 42 +++++++++++-------- src/razor/razorOmnisharpDownloader.ts | 6 ++- .../omnisharpDownloader.test.ts | 3 +- .../omnisharpManager.test.ts | 3 +- .../downloadAndInstallPackages.test.ts | 35 +++++----------- 7 files changed, 43 insertions(+), 51 deletions(-) diff --git a/src/omnisharp/omnisharpDownloader.ts b/src/omnisharp/omnisharpDownloader.ts index 0924284585..8b3ad510ea 100644 --- a/src/omnisharp/omnisharpDownloader.ts +++ b/src/omnisharp/omnisharpDownloader.ts @@ -28,7 +28,7 @@ export class OmnisharpDownloader { private packageJSON: any, private platformInfo: PlatformInformation, private extensionPath: string, - private reporter: ITelemetryReporter + private reporter?: ITelemetryReporter ) {} public async DownloadAndInstallOmnisharp( diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index 2226b49c6c..1c5325c328 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -154,7 +154,8 @@ export async function activateOmniSharpLanguageServer( eventStream, context.extension.packageJSON, platformInfo, - context.extension.extensionPath + context.extension.extensionPath, + reporter ); await razorOmnisharpDownloader.DownloadAndInstallRazorOmnisharp( diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index ce1853f205..04aa4811d9 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -26,6 +26,29 @@ export async function downloadAndInstallPackages( telemetryReporter?: ITelemetryReporter, token?: CancellationToken ): Promise { + function sendInstallationFailureTelemetry(pkg: AbsolutePathPackage, installationStage: string, error: any): void { + if (!telemetryReporter) { + return; + } + + const telemetryProperties: { [key: string]: string } = { + installStage: installationStage, + packageId: pkg.id, + isOptional: pkg.isOptional ? 'true' : 'false', + }; + + if (error instanceof NestedError && error.err instanceof PackageError) { + telemetryProperties['error.message'] = error.err.message; + telemetryProperties['error.packageUrl'] = error.err.pkg.url; + } else if (error instanceof PackageError) { + telemetryProperties['error.message'] = error.message; + telemetryProperties['error.packageUrl'] = error.pkg.url; + } + + const eventName = pkg.isOptional ? 'OptionalPackageInstallationFailed' : 'PackageInstallationFailed'; + telemetryReporter.sendTelemetryEvent(eventName, telemetryProperties); + } + eventStream.post(new PackageInstallStart()); for (const pkg of packages) { let installationStage = 'touchBeginFile'; @@ -64,24 +87,7 @@ export async function downloadAndInstallPackages( } // Send telemetry for the failure - if (telemetryReporter) { - const telemetryProperties: { [key: string]: string } = { - installStage: installationStage, - packageId: pkg.id, - isOptional: pkg.isOptional ? 'true' : 'false', - }; - - if (error instanceof NestedError && error.err instanceof PackageError) { - telemetryProperties['error.message'] = error.err.message; - telemetryProperties['error.packageUrl'] = error.err.pkg.url; - } else if (error instanceof PackageError) { - telemetryProperties['error.message'] = error.message; - telemetryProperties['error.packageUrl'] = error.pkg.url; - } - - const eventName = pkg.isOptional ? 'OptionalPackageInstallationFailed' : 'PackageInstallationFailed'; - telemetryReporter.sendTelemetryEvent(eventName, telemetryProperties); - } + sendInstallationFailureTelemetry(pkg, installationStage, error); // If the package is optional, log and continue with the next package if (pkg.isOptional) { diff --git a/src/razor/razorOmnisharpDownloader.ts b/src/razor/razorOmnisharpDownloader.ts index e87b0e3fcb..ffd433ba81 100644 --- a/src/razor/razorOmnisharpDownloader.ts +++ b/src/razor/razorOmnisharpDownloader.ts @@ -11,6 +11,7 @@ import { downloadAndInstallPackages } from '../packageManager/downloadAndInstall import { getRuntimeDependenciesPackages } from '../tools/runtimeDependencyPackageUtils'; import { getAbsolutePathPackagesToInstall } from '../packageManager/getAbsolutePathPackagesToInstall'; import { isValidDownload } from '../packageManager/isValidDownload'; +import { ITelemetryReporter } from '../shared/telemetryReporter'; export class RazorOmnisharpDownloader { public constructor( @@ -18,7 +19,8 @@ export class RazorOmnisharpDownloader { private eventStream: EventStream, private packageJSON: any, private platformInfo: PlatformInformation, - private extensionPath: string + private extensionPath: string, + private reporter?: ITelemetryReporter ) {} public async DownloadAndInstallRazorOmnisharp(version: string): Promise { @@ -39,7 +41,7 @@ export class RazorOmnisharpDownloader { this.networkSettingsProvider, this.eventStream, isValidDownload, - undefined + this.reporter ) ) { this.eventStream.post(new InstallationSuccess()); diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts index 6047bbc87f..74d2b999f7 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpDownloader.test.ts @@ -54,8 +54,7 @@ import { modernNetVersion } from '../../../src/omnisharp/omnisharpPackageCreator eventStream, testPackageJSON, platformInfo, - extensionPath, - undefined as any + extensionPath ); server = await MockHttpsServer.CreateMockHttpsServer(); testZip = await TestZip.createTestZipAsync(createTestFile('Foo', 'foo.txt')); diff --git a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts index 586012ca8e..78f882771e 100644 --- a/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts +++ b/test/omnisharp/omnisharpUnitTests/omnisharpManager.test.ts @@ -245,8 +245,7 @@ function GetTestOmniSharpManager( eventStream, testPackageJSON, platformInfo, - extensionPath, - undefined as any + extensionPath ); return new OmnisharpManager(downloader, platformInfo, serverUrl); } diff --git a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 33647e8f90..9be17a0f4b 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -87,8 +87,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); for (const elem of testZip.files) { const filePath = path.join(tmpDirPath, elem.path); @@ -101,8 +100,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(await util.fileExists(path.join(tmpDirPath, 'install.Lock'))).toBe(true); }); @@ -121,8 +119,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(eventBus.getEvents()).toStrictEqual(eventsSequence); }); @@ -156,8 +153,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(eventBus.getEvents()).toStrictEqual(eventsSequence); }); @@ -184,8 +180,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { downloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(eventBus.getEvents()).toStrictEqual(eventsSequence); }); @@ -201,8 +196,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { notDownloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); const obtainedEvents = eventBus.getEvents(); expect(obtainedEvents[0]).toStrictEqual(eventsSequence[0]); @@ -218,8 +212,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { notDownloadablePackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(await util.fileExists(path.join(tmpDirPath, 'install.Lock'))).toBe(false); }); @@ -240,8 +233,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { optionalPackage, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(result).toBe(true); }); @@ -266,8 +258,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { mixedPackages, networkSettingsProvider, eventStream, - downloadValidator, - undefined + downloadValidator ); expect(result).toBe(true); expect(await util.fileExists(path.join(tmpInstallDir2.name, 'install.Lock'))).toBe(true); @@ -285,13 +276,7 @@ describe(`${downloadAndInstallPackages.name}`, () => { ]; eventBus.getEvents(); // Clear any previous events - await downloadAndInstallPackages( - optionalPackage, - networkSettingsProvider, - eventStream, - downloadValidator, - undefined - ); + await downloadAndInstallPackages(optionalPackage, networkSettingsProvider, eventStream, downloadValidator); const obtainedEvents = eventBus.getEvents(); const installationFailureEvent = obtainedEvents.find( (event) => event instanceof InstallationFailure From bf75f6efb50fef296f72ad44738958c3caabb62d Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 15:03:02 -0700 Subject: [PATCH 059/105] Mark the roslynCopilot dependency as optional --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index a08d4cc233..a2d842f480 100644 --- a/package.json +++ b/package.json @@ -414,7 +414,8 @@ "neutral" ], "installTestPath": "./.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll", - "integrity": "0BD733B23A706226F2B429AB0CE35576FB474493C8E19C7B88311007876DE5CC" + "integrity": "0BD733B23A706226F2B429AB0CE35576FB474493C8E19C7B88311007876DE5CC", + "isOptional": true }, { "id": "Debugger", From bd3a4985de4b3f7fdc7d2ade8053bdfbe487f84c Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 15:20:18 -0700 Subject: [PATCH 060/105] PR feedback --- package.json | 3 +- .../extensions/builtInComponents.ts | 2 - src/packageManager/IPackage.ts | 1 - src/packageManager/absolutePathPackage.ts | 6 +- .../downloadAndInstallPackages.ts | 55 +++++++-------- .../downloadAndInstallPackages.test.ts | 68 ------------------- 6 files changed, 28 insertions(+), 107 deletions(-) diff --git a/package.json b/package.json index a2d842f480..a08d4cc233 100644 --- a/package.json +++ b/package.json @@ -414,8 +414,7 @@ "neutral" ], "installTestPath": "./.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll", - "integrity": "0BD733B23A706226F2B429AB0CE35576FB474493C8E19C7B88311007876DE5CC", - "isOptional": true + "integrity": "0BD733B23A706226F2B429AB0CE35576FB474493C8E19C7B88311007876DE5CC" }, { "id": "Debugger", diff --git a/src/lsptoolshost/extensions/builtInComponents.ts b/src/lsptoolshost/extensions/builtInComponents.ts index 119aca8bd7..9574df5556 100644 --- a/src/lsptoolshost/extensions/builtInComponents.ts +++ b/src/lsptoolshost/extensions/builtInComponents.ts @@ -27,13 +27,11 @@ export const componentInfo: { [key: string]: ComponentInfo } = { 'Microsoft.VisualStudio.DesignTools.CodeAnalysis.dll', 'Microsoft.VisualStudio.DesignTools.CodeAnalysis.Diagnostics.dll', ], - isOptional: true, }, razorDevKit: { defaultFolderName: '.razorDevKit', optionName: 'razorDevKit', componentDllPaths: ['Microsoft.VisualStudio.DevKit.Razor.dll'], - isOptional: true, }, razorExtension: { defaultFolderName: '.razorExtension', diff --git a/src/packageManager/IPackage.ts b/src/packageManager/IPackage.ts index 2ede628b38..91d0d826dc 100644 --- a/src/packageManager/IPackage.ts +++ b/src/packageManager/IPackage.ts @@ -13,5 +13,4 @@ export interface IPackage { platformId?: string; integrity?: string; isFramework?: boolean; - isOptional?: boolean; } diff --git a/src/packageManager/absolutePathPackage.ts b/src/packageManager/absolutePathPackage.ts index 578ff2d1e3..5505dc43eb 100644 --- a/src/packageManager/absolutePathPackage.ts +++ b/src/packageManager/absolutePathPackage.ts @@ -20,8 +20,7 @@ export class AbsolutePathPackage implements IPackage { public fallbackUrl?: string, public platformId?: string, public integrity?: string, - public isFramework?: boolean, - public isOptional?: boolean + public isFramework?: boolean ) {} public static getAbsolutePathPackage(pkg: Package, extensionPath: string) { @@ -37,8 +36,7 @@ export class AbsolutePathPackage implements IPackage { pkg.fallbackUrl, pkg.platformId, pkg.integrity, - pkg.isFramework, - pkg.isOptional + pkg.isFramework ); } } diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index 04aa4811d9..f213d961cb 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -26,29 +26,7 @@ export async function downloadAndInstallPackages( telemetryReporter?: ITelemetryReporter, token?: CancellationToken ): Promise { - function sendInstallationFailureTelemetry(pkg: AbsolutePathPackage, installationStage: string, error: any): void { - if (!telemetryReporter) { - return; - } - - const telemetryProperties: { [key: string]: string } = { - installStage: installationStage, - packageId: pkg.id, - isOptional: pkg.isOptional ? 'true' : 'false', - }; - - if (error instanceof NestedError && error.err instanceof PackageError) { - telemetryProperties['error.message'] = error.err.message; - telemetryProperties['error.packageUrl'] = error.err.pkg.url; - } else if (error instanceof PackageError) { - telemetryProperties['error.message'] = error.message; - telemetryProperties['error.packageUrl'] = error.pkg.url; - } - - const eventName = pkg.isOptional ? 'OptionalPackageInstallationFailed' : 'PackageInstallationFailed'; - telemetryReporter.sendTelemetryEvent(eventName, telemetryProperties); - } - + let downloadFailed = false; eventStream.post(new PackageInstallStart()); for (const pkg of packages) { let installationStage = 'touchBeginFile'; @@ -89,12 +67,7 @@ export async function downloadAndInstallPackages( // Send telemetry for the failure sendInstallationFailureTelemetry(pkg, installationStage, error); - // If the package is optional, log and continue with the next package - if (pkg.isOptional) { - continue; - } - - return false; + downloadFailed = true; } finally { try { if (await installFileExists(pkg.installPath, InstallFileType.Begin)) { @@ -106,5 +79,27 @@ export async function downloadAndInstallPackages( } } - return true; + return !downloadFailed; + + function sendInstallationFailureTelemetry(pkg: AbsolutePathPackage, installationStage: string, error: any): void { + if (!telemetryReporter) { + return; + } + + const telemetryProperties: { [key: string]: string } = { + installStage: installationStage, + packageId: pkg.id, + isOptional: pkg.isOptional ? 'true' : 'false', + }; + + if (error instanceof NestedError && error.err instanceof PackageError) { + telemetryProperties['error.message'] = error.err.message; + telemetryProperties['error.packageUrl'] = error.err.pkg.url; + } else if (error instanceof PackageError) { + telemetryProperties['error.message'] = error.message; + telemetryProperties['error.packageUrl'] = error.pkg.url; + } + + telemetryReporter.sendTelemetryEvent('PackageInstallationFailed', telemetryProperties); + } } diff --git a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts index 9be17a0f4b..9d8854a2bf 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/downloadAndInstallPackages.test.ts @@ -218,74 +218,6 @@ describe(`${downloadAndInstallPackages.name}`, () => { }); }); - describe('Optional packages', () => { - test('Returns true and continues when an optional package fails to download', async () => { - const optionalPackage = [ - { - url: `${server.baseUrl}/notDownloadablePackage`, - description: 'Optional Package', - installPath: new AbsolutePath(tmpDirPath), - isOptional: true, - }, - ]; - - const result = await downloadAndInstallPackages( - optionalPackage, - networkSettingsProvider, - eventStream, - downloadValidator - ); - expect(result).toBe(true); - }); - - test('Continues to install remaining packages after optional package fails', async () => { - const tmpInstallDir2 = await CreateTmpDir(true); - const mixedPackages = [ - { - url: `${server.baseUrl}/notDownloadablePackage`, - description: 'Optional Package', - installPath: new AbsolutePath(tmpDirPath), - isOptional: true, - }, - { - url: `${server.baseUrl}/downloadablePackage`, - description: packageDescription, - installPath: new AbsolutePath(tmpInstallDir2.name), - }, - ]; - - const result = await downloadAndInstallPackages( - mixedPackages, - networkSettingsProvider, - eventStream, - downloadValidator - ); - expect(result).toBe(true); - expect(await util.fileExists(path.join(tmpInstallDir2.name, 'install.Lock'))).toBe(true); - tmpInstallDir2.dispose(); - }); - - test('InstallationFailure event is logged for optional package', async () => { - const optionalPackage = [ - { - url: `${server.baseUrl}/notDownloadablePackage`, - description: 'Optional Package', - installPath: new AbsolutePath(tmpDirPath), - isOptional: true, - }, - ]; - - eventBus.getEvents(); // Clear any previous events - await downloadAndInstallPackages(optionalPackage, networkSettingsProvider, eventStream, downloadValidator); - const obtainedEvents = eventBus.getEvents(); - const installationFailureEvent = obtainedEvents.find( - (event) => event instanceof InstallationFailure - ) as InstallationFailure; - expect(installationFailureEvent).toBeDefined(); - expect(installationFailureEvent.stage).toEqual('downloadPackage'); - }); - }); - afterEach(async () => { if (tmpInstallDir) { tmpInstallDir.dispose(); From b4b22c11fc806610ceb2921c5effbfa145ee1b53 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 22:40:07 +0000 Subject: [PATCH 061/105] Add logging for missing optional components and restore isOptional property Co-authored-by: JoeRobich <611219+JoeRobich@users.noreply.github.com> --- .../extensions/builtInComponents.ts | 11 ++++++++-- .../server/roslynLanguageServer.ts | 20 +++++++++++-------- src/packageManager/IPackage.ts | 1 + src/packageManager/absolutePathPackage.ts | 6 ++++-- src/razor/src/extension.ts | 2 +- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/lsptoolshost/extensions/builtInComponents.ts b/src/lsptoolshost/extensions/builtInComponents.ts index 9574df5556..d4120c1c80 100644 --- a/src/lsptoolshost/extensions/builtInComponents.ts +++ b/src/lsptoolshost/extensions/builtInComponents.ts @@ -46,14 +46,21 @@ export const componentInfo: { [key: string]: ComponentInfo } = { }, }; -export function getComponentPaths(componentName: string, options: LanguageServerOptions | undefined): string[] { +export function getComponentPaths( + componentName: string, + options: LanguageServerOptions | undefined, + channel?: { warn: (message: string) => void } +): string[] { const component = componentInfo[componentName]; const baseFolder = getComponentFolderPath(component, options); const paths = component.componentDllPaths.map((dllPath) => path.join(baseFolder, dllPath)); for (const dllPath of paths) { if (!fs.existsSync(dllPath)) { if (component.isOptional) { - // Component is optional and doesn't exist - return empty array + // Component is optional and doesn't exist - log warning and return empty array + if (channel) { + channel.warn(`Optional component '${componentName}' could not be found at '${dllPath}'.`); + } return []; } throw new Error(`Component DLL not found: ${dllPath}`); diff --git a/src/lsptoolshost/server/roslynLanguageServer.ts b/src/lsptoolshost/server/roslynLanguageServer.ts index 8d1951d1f4..6ddc1ccadc 100644 --- a/src/lsptoolshost/server/roslynLanguageServer.ts +++ b/src/lsptoolshost/server/roslynLanguageServer.ts @@ -651,7 +651,7 @@ export class RoslynLanguageServer { : razorOptions.razorServerPath; let razorComponentPath = ''; - getComponentPaths('razorExtension', languageServerOptions).forEach((extPath) => { + getComponentPaths('razorExtension', languageServerOptions, channel).forEach((extPath) => { additionalExtensionPaths.push(extPath); razorComponentPath = path.dirname(extPath); }); @@ -695,10 +695,10 @@ export class RoslynLanguageServer { // Set command enablement as soon as we know devkit is available. await vscode.commands.executeCommand('setContext', 'dotnet.server.activationContext', 'RoslynDevKit'); - const csharpDevKitArgs = this.getCSharpDevKitExportArgs(additionalExtensionPaths); + const csharpDevKitArgs = this.getCSharpDevKitExportArgs(additionalExtensionPaths, channel); args = args.concat(csharpDevKitArgs); - await this.setupDevKitEnvironment(dotnetInfo.env, csharpDevkitExtension, additionalExtensionPaths); + await this.setupDevKitEnvironment(dotnetInfo.env, csharpDevkitExtension, additionalExtensionPaths, channel); } else { // C# Dev Kit is not installed - continue C#-only activation. channel.info('Activating C# standalone...'); @@ -1012,10 +1012,13 @@ export class RoslynLanguageServer { ); } - private static getCSharpDevKitExportArgs(additionalExtensionPaths: string[]): string[] { + private static getCSharpDevKitExportArgs( + additionalExtensionPaths: string[], + channel: vscode.LogOutputChannel + ): string[] { const args: string[] = []; - const devKitDepsPath = getComponentPaths('roslynDevKit', languageServerOptions); + const devKitDepsPath = getComponentPaths('roslynDevKit', languageServerOptions, channel); if (devKitDepsPath.length > 1) { throw new Error('Expected only one devkit deps path'); } @@ -1026,7 +1029,7 @@ export class RoslynLanguageServer { // Also include the Xaml Dev Kit extensions, if enabled. if (languageServerOptions.enableXamlTools) { - getComponentPaths('xamlTools', languageServerOptions).forEach((path) => + getComponentPaths('xamlTools', languageServerOptions, channel).forEach((path) => additionalExtensionPaths.push(path) ); } @@ -1086,7 +1089,8 @@ export class RoslynLanguageServer { private static async setupDevKitEnvironment( env: NodeJS.ProcessEnv, csharpDevkitExtension: vscode.Extension, - additionalExtensionPaths: string[] + additionalExtensionPaths: string[], + channel: vscode.LogOutputChannel ): Promise { const exports: CSharpDevKitExports = await csharpDevkitExtension.activate(); @@ -1096,7 +1100,7 @@ export class RoslynLanguageServer { await exports.setupTelemetryEnvironmentAsync(env); } - getComponentPaths('roslynCopilot', languageServerOptions).forEach((extPath) => { + getComponentPaths('roslynCopilot', languageServerOptions, channel).forEach((extPath) => { additionalExtensionPaths.push(extPath); }); } diff --git a/src/packageManager/IPackage.ts b/src/packageManager/IPackage.ts index 91d0d826dc..2ede628b38 100644 --- a/src/packageManager/IPackage.ts +++ b/src/packageManager/IPackage.ts @@ -13,4 +13,5 @@ export interface IPackage { platformId?: string; integrity?: string; isFramework?: boolean; + isOptional?: boolean; } diff --git a/src/packageManager/absolutePathPackage.ts b/src/packageManager/absolutePathPackage.ts index 5505dc43eb..578ff2d1e3 100644 --- a/src/packageManager/absolutePathPackage.ts +++ b/src/packageManager/absolutePathPackage.ts @@ -20,7 +20,8 @@ export class AbsolutePathPackage implements IPackage { public fallbackUrl?: string, public platformId?: string, public integrity?: string, - public isFramework?: boolean + public isFramework?: boolean, + public isOptional?: boolean ) {} public static getAbsolutePathPackage(pkg: Package, extensionPath: string) { @@ -36,7 +37,8 @@ export class AbsolutePathPackage implements IPackage { pkg.fallbackUrl, pkg.platformId, pkg.integrity, - pkg.isFramework + pkg.isFramework, + pkg.isOptional ); } } diff --git a/src/razor/src/extension.ts b/src/razor/src/extension.ts index 8fdac6c67b..a2555ac0b7 100644 --- a/src/razor/src/extension.ts +++ b/src/razor/src/extension.ts @@ -104,7 +104,7 @@ export async function activate( await setupDevKitEnvironment(dotnetInfo.env, csharpDevkitExtension, logger); if (vscode.env.isTelemetryEnabled) { - const razorComponentPaths = getComponentPaths('razorDevKit', undefined); + const razorComponentPaths = getComponentPaths('razorDevKit', undefined, logger.outputChannel); if (razorComponentPaths.length !== 1) { logger.logError('Failed to find Razor DevKit telemetry extension path.', undefined); } else { From 5f0208d57dadcc6a8efafff57945cf036d4f3425 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 15:45:28 -0700 Subject: [PATCH 062/105] Remove isOptional from IPackage --- src/lsptoolshost/extensions/builtInComponents.ts | 3 ++- src/packageManager/IPackage.ts | 1 - src/packageManager/absolutePathPackage.ts | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/lsptoolshost/extensions/builtInComponents.ts b/src/lsptoolshost/extensions/builtInComponents.ts index d4120c1c80..4f67c80e28 100644 --- a/src/lsptoolshost/extensions/builtInComponents.ts +++ b/src/lsptoolshost/extensions/builtInComponents.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import * as vscode from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; import { LanguageServerOptions } from '../../shared/options'; @@ -49,7 +50,7 @@ export const componentInfo: { [key: string]: ComponentInfo } = { export function getComponentPaths( componentName: string, options: LanguageServerOptions | undefined, - channel?: { warn: (message: string) => void } + channel?: vscode.LogOutputChannel ): string[] { const component = componentInfo[componentName]; const baseFolder = getComponentFolderPath(component, options); diff --git a/src/packageManager/IPackage.ts b/src/packageManager/IPackage.ts index 2ede628b38..91d0d826dc 100644 --- a/src/packageManager/IPackage.ts +++ b/src/packageManager/IPackage.ts @@ -13,5 +13,4 @@ export interface IPackage { platformId?: string; integrity?: string; isFramework?: boolean; - isOptional?: boolean; } diff --git a/src/packageManager/absolutePathPackage.ts b/src/packageManager/absolutePathPackage.ts index 578ff2d1e3..5505dc43eb 100644 --- a/src/packageManager/absolutePathPackage.ts +++ b/src/packageManager/absolutePathPackage.ts @@ -20,8 +20,7 @@ export class AbsolutePathPackage implements IPackage { public fallbackUrl?: string, public platformId?: string, public integrity?: string, - public isFramework?: boolean, - public isOptional?: boolean + public isFramework?: boolean ) {} public static getAbsolutePathPackage(pkg: Package, extensionPath: string) { @@ -37,8 +36,7 @@ export class AbsolutePathPackage implements IPackage { pkg.fallbackUrl, pkg.platformId, pkg.integrity, - pkg.isFramework, - pkg.isOptional + pkg.isFramework ); } } From 74c80730aa1b2f3c48bb11e436d70679cd171b66 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 15:51:05 -0700 Subject: [PATCH 063/105] Remove isOptional from IPackage --- src/packageManager/downloadAndInstallPackages.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index f213d961cb..327ae91359 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -89,7 +89,6 @@ export async function downloadAndInstallPackages( const telemetryProperties: { [key: string]: string } = { installStage: installationStage, packageId: pkg.id, - isOptional: pkg.isOptional ? 'true' : 'false', }; if (error instanceof NestedError && error.err instanceof PackageError) { From 504f41284e9a51afcd3236e180b193608f413200 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 23:48:23 +0000 Subject: [PATCH 064/105] Report more granular dependency installation results --- src/installRuntimeDependencies.ts | 19 ++++++++++++------- src/main.ts | 2 +- src/packageManager/IInstallDependencies.ts | 6 ++++-- .../downloadAndInstallPackages.ts | 13 ++++++++----- .../installRuntimeDependencies.test.ts | 12 +++++++----- 5 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/installRuntimeDependencies.ts b/src/installRuntimeDependencies.ts index 7218d6c931..771cf8dff2 100644 --- a/src/installRuntimeDependencies.ts +++ b/src/installRuntimeDependencies.ts @@ -8,7 +8,7 @@ import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from './sha import { EventStream } from './eventStream'; import { getRuntimeDependenciesPackages } from './tools/runtimeDependencyPackageUtils'; import { getAbsolutePathPackagesToInstall } from './packageManager/getAbsolutePathPackagesToInstall'; -import IInstallDependencies from './packageManager/IInstallDependencies'; +import { DependencyInstallationResults, IInstallDependencies } from './packageManager/IInstallDependencies'; import { AbsolutePathPackage } from './packageManager/absolutePathPackage'; export async function installRuntimeDependencies( @@ -19,7 +19,7 @@ export async function installRuntimeDependencies( platformInfo: PlatformInformation, useFramework: boolean, requiredPackageIds: string[] -): Promise { +): Promise { const runTimeDependencies = getRuntimeDependenciesPackages(packageJSON); const packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath); const filteredPackages = filterOmniSharpPackage(packagesToInstall, useFramework); @@ -30,15 +30,20 @@ export async function installRuntimeDependencies( // Display platform information and RID eventStream.post(new LogPlatformInfo(platformInfo)); - if (await installDependencies(filteredRequiredPackages)) { + const installationResults = await installDependencies(filteredRequiredPackages); + + const failedPackages = Object.entries(installationResults) + .filter(([, installed]) => !installed) + .map(([name]) => name); + if (failedPackages.length === 0) { eventStream.post(new InstallationSuccess()); - } else { - return false; } + + return installationResults; } - //All the required packages are already downloaded and installed - return true; + // There was nothing to install + return {}; } function filterOmniSharpPackage(packages: AbsolutePathPackage[], useFramework: boolean) { diff --git a/src/main.ts b/src/main.ts index b001f2eb35..6c1a80cdda 100644 --- a/src/main.ts +++ b/src/main.ts @@ -119,7 +119,7 @@ export async function activate( } else { const getCoreClrDebugPromise = async (languageServerStartedPromise: Promise) => { let coreClrDebugPromise = Promise.resolve(); - if (runtimeDependenciesExist) { + if (runtimeDependenciesExist['Debugger']) { // activate coreclr-debug coreClrDebugPromise = coreclrdebug.activate( context.extension, diff --git a/src/packageManager/IInstallDependencies.ts b/src/packageManager/IInstallDependencies.ts index 6ca5a476f1..cfaf2191a7 100644 --- a/src/packageManager/IInstallDependencies.ts +++ b/src/packageManager/IInstallDependencies.ts @@ -5,6 +5,8 @@ import { AbsolutePathPackage } from './absolutePathPackage'; -export default interface IInstallDependencies { - (packages: AbsolutePathPackage[]): Promise; +export type DependencyInstallationResults = { [name: string]: boolean }; + +export interface IInstallDependencies { + (packages: AbsolutePathPackage[]): Promise; } diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index 327ae91359..b0e747a6b8 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -17,6 +17,7 @@ import { PackageInstallStart } from '../shared/loggingEvents'; import { DownloadValidator } from './isValidDownload'; import { CancellationToken } from 'vscode'; import { ITelemetryReporter } from '../shared/telemetryReporter'; +import { DependencyInstallationResults } from './IInstallDependencies'; export async function downloadAndInstallPackages( packages: AbsolutePathPackage[], @@ -25,9 +26,9 @@ export async function downloadAndInstallPackages( downloadValidator: DownloadValidator, telemetryReporter?: ITelemetryReporter, token?: CancellationToken -): Promise { - let downloadFailed = false; +): Promise { eventStream.post(new PackageInstallStart()); + const results: DependencyInstallationResults = {}; for (const pkg of packages) { let installationStage = 'touchBeginFile'; try { @@ -51,12 +52,16 @@ export async function downloadAndInstallPackages( await InstallZip(buffer, pkg.description, pkg.installPath, pkg.binaries, eventStream); installationStage = 'touchLockFile'; await touchInstallFile(pkg.installPath, InstallFileType.Lock); + results[pkg.id] = true; break; } else { eventStream.post(new IntegrityCheckFailure(pkg.description, pkg.url, willTryInstallingPackage())); + results[pkg.id] = false; } } } catch (error) { + results[pkg.id] = false; + if (error instanceof NestedError) { const packageError = new PackageError(error.message, pkg, error.err); eventStream.post(new InstallationFailure(installationStage, packageError)); @@ -66,8 +71,6 @@ export async function downloadAndInstallPackages( // Send telemetry for the failure sendInstallationFailureTelemetry(pkg, installationStage, error); - - downloadFailed = true; } finally { try { if (await installFileExists(pkg.installPath, InstallFileType.Begin)) { @@ -79,7 +82,7 @@ export async function downloadAndInstallPackages( } } - return !downloadFailed; + return results; function sendInstallationFailureTelemetry(pkg: AbsolutePathPackage, installationStage: string, error: any): void { if (!telemetryReporter) { diff --git a/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts b/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts index e1a3b89f70..08eaf30900 100644 --- a/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts +++ b/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts @@ -5,7 +5,7 @@ import { describe, test, expect, beforeEach } from '@jest/globals'; import { installRuntimeDependencies } from '../../../src/installRuntimeDependencies'; -import IInstallDependencies from '../../../src/packageManager/IInstallDependencies'; +import { IInstallDependencies } from '../../../src/packageManager/IInstallDependencies'; import { EventStream } from '../../../src/eventStream'; import { PlatformInformation } from '../../../src/shared/platform'; import TestEventBus from './testAssets/testEventBus'; @@ -28,7 +28,8 @@ describe(`${installRuntimeDependencies.name}`, () => { beforeEach(() => { eventStream = new EventStream(); eventBus = new TestEventBus(eventStream); - installDependencies = async () => Promise.resolve(true); + installDependencies = async (packages) => + Promise.resolve(packages.reduce((acc, pkg) => ({ ...acc, [pkg.id]: true }), {})); }); describe('When all the dependencies already exist', () => { @@ -90,7 +91,7 @@ describe(`${installRuntimeDependencies.name}`, () => { let inputPackage: AbsolutePathPackage[]; installDependencies = async (packages) => { inputPackage = packages; - return Promise.resolve(true); + return Promise.resolve(packages.reduce((acc, pkg) => ({ ...acc, [pkg.id]: true }), {})); }; const installed = await installRuntimeDependencies( @@ -111,7 +112,8 @@ describe(`${installRuntimeDependencies.name}`, () => { }); test('Returns false when installDependencies returns false', async () => { - installDependencies = async () => Promise.resolve(false); + installDependencies = async (packages) => + Promise.resolve(packages.reduce((acc, pkg) => ({ ...acc, [pkg.id]: false }), {})); const installed = await installRuntimeDependencies( packageJSON, extensionPath, @@ -121,7 +123,7 @@ describe(`${installRuntimeDependencies.name}`, () => { useFramework, ['myPackage'] ); - expect(installed).toBe(false); + expect(installed['myPackage']).toBe(false); }); }); }); From 2f7cebe53634fa94345af21eb9dc6dac6d95b8c0 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 15 Oct 2025 23:52:28 +0000 Subject: [PATCH 065/105] Fix up tests --- .../omnisharpUnitTests/installRuntimeDependencies.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts b/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts index 08eaf30900..0ce27b8f82 100644 --- a/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts +++ b/test/omnisharp/omnisharpUnitTests/installRuntimeDependencies.test.ts @@ -49,7 +49,9 @@ describe(`${installRuntimeDependencies.name}`, () => { useFramework, ['Debugger', 'Omnisharp', 'Razor'] ); - expect(installed).toBe(true); + expect(installed['Debugger']).toBe(true); + expect(installed['Omnisharp']).toBe(true); + expect(installed['Razor']).toBe(true); }); test("Doesn't log anything to the eventStream", async () => { @@ -103,7 +105,7 @@ describe(`${installRuntimeDependencies.name}`, () => { useFramework, ['myPackage'] ); - expect(installed).toBe(true); + expect(installed['myPackage']).toBe(true); isNotNull(inputPackage!); expect(inputPackage).toHaveLength(1); expect(inputPackage[0]).toStrictEqual( From 6f63cf6e8c84bc8fba8a35b870032bf2c3fa8a50 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 16 Oct 2025 00:01:20 +0000 Subject: [PATCH 066/105] Fixup remaining usage of downloadAndInstallPackages --- src/main.ts | 2 +- src/omnisharp/omnisharpDownloader.ts | 20 +++++++++++--------- src/razor/razorOmnisharpDownloader.ts | 20 +++++++++++--------- tasks/offlinePackagingTasks.ts | 17 +++++++++++++---- 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main.ts b/src/main.ts index 6c1a80cdda..434e2e9c52 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ import { vscodeNetworkSettingsProvider } from './networkSettings'; import createOptionStream from './shared/observables/createOptionStream'; import { AbsolutePathPackage } from './packageManager/absolutePathPackage'; import { downloadAndInstallPackages } from './packageManager/downloadAndInstallPackages'; -import IInstallDependencies from './packageManager/IInstallDependencies'; +import { IInstallDependencies } from './packageManager/IInstallDependencies'; import { installRuntimeDependencies } from './installRuntimeDependencies'; import { isValidDownload } from './packageManager/isValidDownload'; import { MigrateOptions } from './shared/migrateOptions'; diff --git a/src/omnisharp/omnisharpDownloader.ts b/src/omnisharp/omnisharpDownloader.ts index 8b3ad510ea..dd0ea5bab0 100644 --- a/src/omnisharp/omnisharpDownloader.ts +++ b/src/omnisharp/omnisharpDownloader.ts @@ -53,15 +53,17 @@ export class OmnisharpDownloader { if (packagesToInstall.length > 0) { this.eventStream.post(new PackageInstallation(`OmniSharp Version = ${version}`)); this.eventStream.post(new LogPlatformInfo(this.platformInfo)); - if ( - await downloadAndInstallPackages( - packagesToInstall, - this.networkSettingsProvider, - this.eventStream, - isValidDownload, - this.reporter - ) - ) { + const installationResults = await downloadAndInstallPackages( + packagesToInstall, + this.networkSettingsProvider, + this.eventStream, + isValidDownload, + this.reporter + ); + const failedPackages = Object.entries(installationResults) + .filter(([, installed]) => !installed) + .map(([name]) => name); + if (failedPackages.length === 0) { this.eventStream.post(new InstallationSuccess()); return true; } diff --git a/src/razor/razorOmnisharpDownloader.ts b/src/razor/razorOmnisharpDownloader.ts index ffd433ba81..83ffd4edc5 100644 --- a/src/razor/razorOmnisharpDownloader.ts +++ b/src/razor/razorOmnisharpDownloader.ts @@ -35,15 +35,17 @@ export class RazorOmnisharpDownloader { if (packagesToInstall.length > 0) { this.eventStream.post(new PackageInstallation(`Razor OmniSharp Version = ${version}`)); this.eventStream.post(new LogPlatformInfo(this.platformInfo)); - if ( - await downloadAndInstallPackages( - packagesToInstall, - this.networkSettingsProvider, - this.eventStream, - isValidDownload, - this.reporter - ) - ) { + const installationResults = await downloadAndInstallPackages( + packagesToInstall, + this.networkSettingsProvider, + this.eventStream, + isValidDownload, + this.reporter + ); + const failedPackages = Object.entries(installationResults) + .filter(([, installed]) => !installed) + .map(([name]) => name); + if (failedPackages.length === 0) { this.eventStream.post(new InstallationSuccess()); return true; } diff --git a/tasks/offlinePackagingTasks.ts b/tasks/offlinePackagingTasks.ts index fb9714b4c9..af16c0e1a0 100644 --- a/tasks/offlinePackagingTasks.ts +++ b/tasks/offlinePackagingTasks.ts @@ -280,10 +280,19 @@ async function installPackageJsonDependency( codeExtensionPath ); const provider = () => new NetworkSettings('', true); - if ( - !(await downloadAndInstallPackages(packagesToInstall, provider, eventStream, isValidDownload, undefined, token)) - ) { - throw Error('Failed to download package.'); + const installationResults = await downloadAndInstallPackages( + packagesToInstall, + provider, + eventStream, + isValidDownload, + undefined, + token + ); + const failedPackages = Object.entries(installationResults) + .filter(([, installed]) => !installed) + .map(([name]) => name); + if (failedPackages.length > 0) { + throw Error('The following packages failed to install: ' + failedPackages.join(', ')); } } From ef03174d81e5a34b67a6fb84165df4db0d84cb10 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 16 Oct 2025 13:26:00 +0000 Subject: [PATCH 067/105] Return installation status for already installed dependencies --- src/installRuntimeDependencies.ts | 40 +++++++++++-------- src/packageManager/IInstallDependencies.ts | 4 +- .../downloadAndInstallPackages.ts | 6 +-- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/installRuntimeDependencies.ts b/src/installRuntimeDependencies.ts index 771cf8dff2..3cdab86cd2 100644 --- a/src/installRuntimeDependencies.ts +++ b/src/installRuntimeDependencies.ts @@ -8,7 +8,7 @@ import { PackageInstallation, LogPlatformInfo, InstallationSuccess } from './sha import { EventStream } from './eventStream'; import { getRuntimeDependenciesPackages } from './tools/runtimeDependencyPackageUtils'; import { getAbsolutePathPackagesToInstall } from './packageManager/getAbsolutePathPackagesToInstall'; -import { DependencyInstallationResults, IInstallDependencies } from './packageManager/IInstallDependencies'; +import { DependencyInstallationStatus, IInstallDependencies } from './packageManager/IInstallDependencies'; import { AbsolutePathPackage } from './packageManager/absolutePathPackage'; export async function installRuntimeDependencies( @@ -19,31 +19,39 @@ export async function installRuntimeDependencies( platformInfo: PlatformInformation, useFramework: boolean, requiredPackageIds: string[] -): Promise { +): Promise { const runTimeDependencies = getRuntimeDependenciesPackages(packageJSON); const packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath); + + // PackagesToInstall will only return packages that are not already installed. However, + // we need to return the installation status of all required packages, so we need to + // track which required packages are already installed, so that we can return true for them. + const installedPackages = requiredPackageIds.filter( + (id) => packagesToInstall.find((pkg) => pkg.id === id) === undefined + ); + const installedPackagesResults = installedPackages.reduce((acc, id) => ({ ...acc, [id]: true }), {}); + const filteredPackages = filterOmniSharpPackage(packagesToInstall, useFramework); const filteredRequiredPackages = filteredRequiredPackage(requiredPackageIds, filteredPackages); - if (filteredRequiredPackages.length > 0) { - eventStream.post(new PackageInstallation('C# dependencies')); - // Display platform information and RID - eventStream.post(new LogPlatformInfo(platformInfo)); + if (filteredRequiredPackages.length === 0) { + return installedPackagesResults; + } - const installationResults = await installDependencies(filteredRequiredPackages); + eventStream.post(new PackageInstallation('C# dependencies')); + // Display platform information and RID + eventStream.post(new LogPlatformInfo(platformInfo)); - const failedPackages = Object.entries(installationResults) - .filter(([, installed]) => !installed) - .map(([name]) => name); - if (failedPackages.length === 0) { - eventStream.post(new InstallationSuccess()); - } + const installationResults = await installDependencies(filteredRequiredPackages); - return installationResults; + const failedPackages = Object.entries(installationResults) + .filter(([, installed]) => !installed) + .map(([name]) => name); + if (failedPackages.length === 0) { + eventStream.post(new InstallationSuccess()); } - // There was nothing to install - return {}; + return { ...installedPackagesResults, ...installationResults }; } function filterOmniSharpPackage(packages: AbsolutePathPackage[], useFramework: boolean) { diff --git a/src/packageManager/IInstallDependencies.ts b/src/packageManager/IInstallDependencies.ts index cfaf2191a7..d4c12b3cfc 100644 --- a/src/packageManager/IInstallDependencies.ts +++ b/src/packageManager/IInstallDependencies.ts @@ -5,8 +5,8 @@ import { AbsolutePathPackage } from './absolutePathPackage'; -export type DependencyInstallationResults = { [name: string]: boolean }; +export type DependencyInstallationStatus = { [name: string]: boolean }; export interface IInstallDependencies { - (packages: AbsolutePathPackage[]): Promise; + (packages: AbsolutePathPackage[]): Promise; } diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index b0e747a6b8..da39e0e352 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -17,7 +17,7 @@ import { PackageInstallStart } from '../shared/loggingEvents'; import { DownloadValidator } from './isValidDownload'; import { CancellationToken } from 'vscode'; import { ITelemetryReporter } from '../shared/telemetryReporter'; -import { DependencyInstallationResults } from './IInstallDependencies'; +import { DependencyInstallationStatus } from './IInstallDependencies'; export async function downloadAndInstallPackages( packages: AbsolutePathPackage[], @@ -26,9 +26,9 @@ export async function downloadAndInstallPackages( downloadValidator: DownloadValidator, telemetryReporter?: ITelemetryReporter, token?: CancellationToken -): Promise { +): Promise { eventStream.post(new PackageInstallStart()); - const results: DependencyInstallationResults = {}; + const results: DependencyInstallationStatus = {}; for (const pkg of packages) { let installationStage = 'touchBeginFile'; try { From 97a37df414622e7514e8bfce2c75096cdf0ce66f Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 20 Oct 2025 11:01:15 +1100 Subject: [PATCH 068/105] Bump Razor to 10.0.0-preview.25517.9 --- CHANGELOG.md | 8 +++++++- package.json | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09a644f053..45a6cc6053 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,10 +12,16 @@ * Improve diagnostic quality for less accessible base type argument (PR: [#80483](https://github.com/dotnet/roslyn/pull/80483)) * Build BuildHost against net8.0 (PR: [#80641](https://github.com/dotnet/roslyn/pull/80641)) * Add completion for directives in file based programs (PR: [#80410](https://github.com/dotnet/roslyn/pull/80410)) -* Bump Razor to 10.0.0-preview.25512.6 (PR: [#8694](https://github.com/dotnet/vscode-csharp/pull/8694)) +* Bump Razor to 10.0.0-preview.25517.9 (PR: [#8704](https://github.com/dotnet/vscode-csharp/pull/8704)) * Provide a way for users to turn on logging for formatting, to help resolve bugs (PR: [#12304](https://github.com/dotnet/razor/pull/12304)) * Handle diagnostic spans that cover an entire attribute value (PR: [#12302](https://github.com/dotnet/razor/pull/12302)) * Map component start tags to C#, for better GTD, FAR, Hover, etc. (PR: [#12287](https://github.com/dotnet/razor/pull/12287)) + * Add snippet support for component completion with EditorRequired attributes (PR: [#12325](https://github.com/dotnet/razor/pull/12325)) + * Add Go To Definition support for file paths in string literals (PR: [#12323](https://github.com/dotnet/razor/pull/12323)) + * Add IntelliSense support for Blazor enhanced navigation and form handling data attributes (PR: [#12324](https://github.com/dotnet/razor/pull/12324)) + * Fix component end tags to behave consistently with start tags for Hover, Go To Definition, and Find All References (PR: [#12327](https://github.com/dotnet/razor/pull/12327)) + * Add out-of-scope Blazor Component completions with auto-insert @using statements (PR: [#12336](https://github.com/dotnet/razor/pull/12336)) + * Fix classification for fully qualified components (PR: [#12335](https://github.com/dotnet/razor/pull/12335)) # 2.94.x * Add completion for razor components in settings (PR: [#8680](https://github.com/dotnet/vscode-csharp/pull/8680)) diff --git a/package.json b/package.json index a08d4cc233..fe7b64889a 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "defaults": { "roslyn": "5.3.0-1.25514.3", "omniSharp": "1.39.14", - "razor": "10.0.0-preview.25512.6", + "razor": "10.0.0-preview.25517.9", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "18.0.11023.10" }, From 2567c3ab493e041e5c59f89d181e5f081c4739d7 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 20 Oct 2025 11:02:07 +1100 Subject: [PATCH 069/105] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45a6cc6053..5ec0f49cff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ * Improve diagnostic quality for less accessible base type argument (PR: [#80483](https://github.com/dotnet/roslyn/pull/80483)) * Build BuildHost against net8.0 (PR: [#80641](https://github.com/dotnet/roslyn/pull/80641)) * Add completion for directives in file based programs (PR: [#80410](https://github.com/dotnet/roslyn/pull/80410)) -* Bump Razor to 10.0.0-preview.25517.9 (PR: [#8704](https://github.com/dotnet/vscode-csharp/pull/8704)) +* Bump Razor to 10.0.0-preview.25517.9 (PR: [#8706](https://github.com/dotnet/vscode-csharp/pull/8706)) * Provide a way for users to turn on logging for formatting, to help resolve bugs (PR: [#12304](https://github.com/dotnet/razor/pull/12304)) * Handle diagnostic spans that cover an entire attribute value (PR: [#12302](https://github.com/dotnet/razor/pull/12302)) * Map component start tags to C#, for better GTD, FAR, Hover, etc. (PR: [#12287](https://github.com/dotnet/razor/pull/12287)) From 04319cdef8efcf58a99c5f2d3abd87607f2ba12a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:08:30 +0000 Subject: [PATCH 070/105] Initial plan From b7f42e23d5df24fb849495aae243c67970bb8f8f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:16:16 +0000 Subject: [PATCH 071/105] Remove editor.formatOnType default configuration for C# Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index fe7b64889a..f2f2784bfb 100644 --- a/package.json +++ b/package.json @@ -5626,9 +5626,6 @@ "[xaml]": { "editor.wordBasedSuggestions": "off" }, - "[csharp]": { - "editor.formatOnType": true - }, "explorer.fileNesting.patterns": { "*.cs": "${capture}.designer.cs,${capture}.g.cs,${capture}.generated.cs,${capture}.run.json,${capture}.settings.json,${capture}.settings.*.json", "*.csproj": "${capture}.csproj.user", From bf6cba38357a415859b4a39091942b566bd37024 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Tue, 21 Oct 2025 16:28:11 -0700 Subject: [PATCH 072/105] Update Debugger to v2.95.0 (#8710) This updates to a new version of the debugger with the following changes: - Updates the underlying managed<->native marshalling technology that the debugger is implemented with to use COM Wrapper, which includes this potential breaking change to Concord extensions: https://github.com/microsoft/ConcordExtensibilitySamples/issues/124 - Numerous bug fixes to match what is shipping with Visual Studio 18.0 --- package.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index f2f2784bfb..26aa8e4180 100644 --- a/package.json +++ b/package.json @@ -419,7 +419,7 @@ { "id": "Debugger", "description": ".NET Core Debugger (Windows / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-win7-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-win7-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "win32" @@ -429,12 +429,12 @@ "arm64" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui.exe", - "integrity": "C25E19B3DBAE55DBBBD7384561E34064CDB92633A816FFB862E68635221A63EC" + "integrity": "9A8766F5B62BC2D7AE80016323B093AD75E822399329DEA32C282187005EBE38" }, { "id": "Debugger", "description": ".NET Core Debugger (Windows / ARM64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-win10-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-win10-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "win32" @@ -443,12 +443,12 @@ "arm64" ], "installTestPath": "./.debugger/arm64/vsdbg-ui.exe", - "integrity": "F8F9DE062D0678CFF808B8BC9AADC59C7C39253B1249DE2F9CF3037163D8049F" + "integrity": "6D495C5DA79179ED78DE03C6C623A4BC022919A58FAC486506DC5917EC68F426" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-osx-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-osx-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "darwin" @@ -462,12 +462,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui", - "integrity": "D1817389B6A1254BDDD8798AD866D6E1AC47740D05E138C060C387C0A53A7925" + "integrity": "72A0BFD3F43D7B3C5CC2091BFB5385BF767370AC59FE88548E28912714FEB4D7" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / arm64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-osx-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-osx-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "darwin" @@ -480,12 +480,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/arm64/vsdbg-ui", - "integrity": "089C742676FD1627ECCF3AAF1643ECCFC654FCED9C0D1E803780CB9C2E1FE355" + "integrity": "08DFFB990A9CBD1A74405C0FB601C3136021E4CBB7ADB2ACEA9A36EBFEB651FE" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-arm.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-arm.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -498,12 +498,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "64DF1D83556A3E33664122B10D94787AF10E54129362D6E8A63F8AA3B47035D3" + "integrity": "1D7E7A1B260347C5D6BFF4BC63FF23A01315B3E180356B3F6E3A974677A3D9C4" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-arm64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -516,12 +516,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "578A61AE844470B7D1814AA8A0A49E21069F68CA16F661648AF85F68DC08BC9D" + "integrity": "27C2301B9DB13FBF26579788084981ED4C516646D296ECD8CAE40E0FDDE5C042" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-musl-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-musl-x64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -534,12 +534,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "5636C90B08D2849C13E198036B467F73080694CC9D5BF7422B04EA25B27633F9" + "integrity": "DD8BC256154E2BD13974D0ACDA2B2EA58593ABB7A553270487A74E0CDDA83249" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / ARM64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-musl-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-musl-arm64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -552,12 +552,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "BF668378285B814949F39718D559D976C7ED0C1575A248370F282210AF513B2E" + "integrity": "1EC09737FA083099F2A03B9B7DF70E813B602A4FCAB50B3FD0CB6F2C46D127F1" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-x64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -570,7 +570,7 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "085CDC403578B24F8335BAFA1B7D62E48FFFEE80419DFA41C6D48D8DBADF95D7" + "integrity": "2B0920ADEC91DA9CE18026CD020488A603C904B4DBE80B30B61337F38B6533F9" }, { "id": "RazorOmnisharp", From 9b40017fa7a6a97f7d717f7d49a18c7708f0bd61 Mon Sep 17 00:00:00 2001 From: siramvikram Date: Wed, 22 Oct 2025 18:39:12 +0000 Subject: [PATCH 073/105] Update main version --- CHANGELOG.md | 2 ++ version.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ec0f49cff..4068b4b6a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +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) +# 2.96.x + # 2.95.x * Update RoslynCopilot url to 18.0.898-alpha (PR: [#8696](https://github.com/dotnet/vscode-csharp/pull/8696)) * Bump Roslyn to 5.3.0-1.25514.3 (PR: [#8700](https://github.com/dotnet/vscode-csharp/pull/8700)) diff --git a/version.json b/version.json index 6777f550fc..61ed86f69a 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.95", + "version": "2.96", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 8d1f05dbcacfe222437047422175c5c19f7fecce Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 23 Oct 2025 15:36:57 -0700 Subject: [PATCH 074/105] Update CHANGELOG for versions 2.95.x and 2.96.x Updated the CHANGELOG to reflect new features and changes in versions 2.95.x and 2.96.x. --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d8b2fad3f..a701205267 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,10 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.96.x - -# 2.95.x -* Update RoslynCopilot url to 18.0.898-alpha (PR: [#8696](https://github.com/dotnet/vscode-csharp/pull/8696)) +* Update Debugger to v2.95.0 (PR: [#8710](https://github.com/dotnet/vscode-csharp/pull/8710)) +* Remove default editor.formatOnType configuration for C# (PR: [#8709](https://github.com/dotnet/vscode-csharp/pull/8709)) +* Support optional components (PR: [#8703](https://github.com/dotnet/vscode-csharp/pull/8703)) +* Update RoslynCopilot url to 18.0.904-alpha (PR: [#8699](https://github.com/dotnet/vscode-csharp/pull/8699)) * Bump Roslyn to 5.3.0-1.25514.3 (PR: [#8700](https://github.com/dotnet/vscode-csharp/pull/8700)) * Ensure `LspWorkspaceManager` returns solutions without misc document when file moved(PR: [#80535](https://github.com/dotnet/roslyn/pull/80535)) * Add limited support for binarylogger to MSBuildWorkspace(PR: [#80120](https://github.com/dotnet/roslyn/pull/80120)) From a70082f42c3e9177d8a691be5e60d72035aa307e Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 23 Oct 2025 15:38:16 -0700 Subject: [PATCH 075/105] Update CHANGELOG for version 2.97.x Updated version number and added new features and improvements. --- CHANGELOG.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4068b4b6a6..e76c748e98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,10 +3,13 @@ - 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) -# 2.96.x +# 2.97.x -# 2.95.x -* Update RoslynCopilot url to 18.0.898-alpha (PR: [#8696](https://github.com/dotnet/vscode-csharp/pull/8696)) +# 2.96.x +* Update Debugger to v2.95.0 (PR: [#8710](https://github.com/dotnet/vscode-csharp/pull/8710)) +* Remove default editor.formatOnType configuration for C# (PR: [#8709](https://github.com/dotnet/vscode-csharp/pull/8709)) +* Support optional components (PR: [#8703](https://github.com/dotnet/vscode-csharp/pull/8703)) +* Update RoslynCopilot url to 18.0.904-alpha (PR: [#8699](https://github.com/dotnet/vscode-csharp/pull/8699)) * Bump Roslyn to 5.3.0-1.25514.3 (PR: [#8700](https://github.com/dotnet/vscode-csharp/pull/8700)) * Ensure `LspWorkspaceManager` returns solutions without misc document when file moved(PR: [#80535](https://github.com/dotnet/roslyn/pull/80535)) * Add limited support for binarylogger to MSBuildWorkspace(PR: [#80120](https://github.com/dotnet/roslyn/pull/80120)) From 1361426107c990a9200825643c7685e98254d4b0 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 23 Oct 2025 15:38:58 -0700 Subject: [PATCH 076/105] Update version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 61ed86f69a..7d419e9a93 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.96", + "version": "2.97", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From c6cf97ad47ff053626d1330779472fed6ff36eda Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:44:18 +0000 Subject: [PATCH 077/105] Initial plan From f6c1a6da706caefdfcf0e38299e977902f44bf12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:49:10 +0000 Subject: [PATCH 078/105] Add job dependency to ensure bump-main-version runs after check-script Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- .github/workflows/branch-snap.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/branch-snap.yml b/.github/workflows/branch-snap.yml index 578b7e1d16..880b9b833e 100644 --- a/.github/workflows/branch-snap.yml +++ b/.github/workflows/branch-snap.yml @@ -13,6 +13,7 @@ jobs: configuration_file_path: '.config/snap-flow.json' bump-main-version: + needs: check-script if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: From 5ea8d49a7027324a49713f37655683380643ce5d Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 24 Oct 2025 14:40:20 -0700 Subject: [PATCH 079/105] Add group ids to configuration groups --- package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package.json b/package.json index 26aa8e4180..df948261aa 100644 --- a/package.json +++ b/package.json @@ -718,6 +718,7 @@ "configuration": [ { "title": "Project", + "id": "ms-dotnettools.csharp.project", "order": 0, "properties": { "dotnet.defaultSolution": { @@ -729,6 +730,7 @@ }, { "title": "Text Editor", + "id": "ms-dotnettools.csharp.textEditor", "order": 1, "properties": { "dotnet.autoInsert.enableAutoInsert": { @@ -953,6 +955,7 @@ }, { "title": "Debugger", + "id": "ms-dotnettools.csharp.debugger", "order": 8, "properties": { "csharp.debug.stopAtEntry": { @@ -1411,6 +1414,7 @@ }, { "title": "LSP Server", + "id": "ms-dotnettools.csharp.lspServer", "order": 9, "properties": { "dotnet.preferCSharpExtension": { @@ -1551,6 +1555,7 @@ }, { "title": "OmniSharp", + "id": "ms-dotnettools.csharp.omniSharp", "order": 10, "properties": { "dotnet.server.useOmnisharp": { From 17c16628548fae203ad9198f68a70db80cba0223 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 27 Oct 2025 09:59:21 +1100 Subject: [PATCH 080/105] Bump Razor to 10.0.0-preview.25524.10 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e76c748e98..844971f63d 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) # 2.97.x +* Bump Razor to 10.0.0-preview.25524.10 (PR: [#8721](https://github.com/dotnet/vscode-csharp/pull/8721)) + * Add CodeAction to simplify fully-qualified component tags (PR: [#12379](https://github.com/dotnet/razor/pull/12379)) + * Fix component and component attribute rename in cohosting (PR: [#12374](https://github.com/dotnet/razor/pull/12374)) # 2.96.x * Update Debugger to v2.95.0 (PR: [#8710](https://github.com/dotnet/vscode-csharp/pull/8710)) diff --git a/package.json b/package.json index df948261aa..bc67c6a9ce 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "defaults": { "roslyn": "5.3.0-1.25514.3", "omniSharp": "1.39.14", - "razor": "10.0.0-preview.25517.9", + "razor": "10.0.0-preview.25524.10", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "18.0.11023.10" }, From f62153e178accdd47fa59356b449a428f5ead3ba Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 27 Oct 2025 11:27:11 -0700 Subject: [PATCH 081/105] Use global.json with rollforward instead of pipeline versions --- azure-pipelines-official.yml | 4 ---- azure-pipelines.yml | 14 +++++--------- azure-pipelines/build-vsix.yml | 4 +--- azure-pipelines/build.yml | 6 +++--- azure-pipelines/dotnet-variables.yml | 3 --- azure-pipelines/prereqs.yml | 10 ++++++---- azure-pipelines/profiling.yml | 4 +--- azure-pipelines/test-matrix.yml | 6 +++--- azure-pipelines/test-omnisharp.yml | 4 ++-- azure-pipelines/test.yml | 6 +++--- azure-pipelines/validate-build.yml | 10 +++------- global.json | 5 ----- msbuild/global.json | 9 +++++++++ 13 files changed, 36 insertions(+), 49 deletions(-) delete mode 100644 azure-pipelines/dotnet-variables.yml delete mode 100644 global.json create mode 100644 msbuild/global.json diff --git a/azure-pipelines-official.yml b/azure-pipelines-official.yml index 06095aa17c..61e5098583 100644 --- a/azure-pipelines-official.yml +++ b/azure-pipelines-official.yml @@ -27,9 +27,6 @@ parameters: - auto default: auto -variables: -- template: /azure-pipelines/dotnet-variables.yml@self - resources: repositories: - repository: 1ESPipelineTemplates @@ -66,4 +63,3 @@ extends: isOfficial: true channel: ${{ parameters.channel }} signType: ${{ parameters.signType }} - dotnetVersion: $(defaultDotnetVersion) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 38b038fef9..d6ba8f19dc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -55,7 +55,6 @@ schedules: - main variables: -- template: /azure-pipelines/dotnet-variables.yml@self - name: testVSCodeVersion ${{ if eq( variables['Build.Reason'], 'Schedule' ) }}: value: insiders @@ -67,11 +66,8 @@ stages: parameters: isOfficial: false signType: test - dotnetVersion: $(defaultDotnetVersion) - template: azure-pipelines/validate-build.yml - parameters: - dotnetVersion: $(defaultDotnetVersion) - stage: displayName: Test Linux (.NET 8) @@ -81,7 +77,7 @@ stages: parameters: os: linux # Prefer the dotnet from the container. - dotnetVersion: '' + installDotNet: false testVSCodeVersion: $(testVSCodeVersion) installAdditionalLinuxDependencies: true pool: @@ -97,7 +93,7 @@ stages: parameters: os: linux # Prefer the dotnet from the container. - dotnetVersion: '' + installDotNet: false testVSCodeVersion: $(testVSCodeVersion) installAdditionalLinuxDependencies: true pool: @@ -112,7 +108,7 @@ stages: - template: azure-pipelines/test-matrix.yml parameters: os: windows - dotnetVersion: $(defaultDotnetVersion) + installDotNet: true testVSCodeVersion: $(testVSCodeVersion) pool: name: NetCore-Public @@ -125,7 +121,7 @@ stages: - template: azure-pipelines/test-matrix.yml parameters: os: macos - dotnetVersion: $(defaultDotnetVersion) + installDotNet: true testVSCodeVersion: $(testVSCodeVersion) pool: name: Azure Pipelines @@ -148,5 +144,5 @@ stages: steps: - template: azure-pipelines/test-omnisharp.yml parameters: - dotnetVersion: $(defaultDotnetVersion) + installDotNet: true testVSCodeVersion: $(testVSCodeVersion) diff --git a/azure-pipelines/build-vsix.yml b/azure-pipelines/build-vsix.yml index f88e9be9f2..89b0468956 100644 --- a/azure-pipelines/build-vsix.yml +++ b/azure-pipelines/build-vsix.yml @@ -4,8 +4,6 @@ parameters: default: 'default' - name: isOfficial type: boolean -- name: dotnetVersion - type: string - name: channel values: - release @@ -128,7 +126,7 @@ stages: - template: /azure-pipelines/prereqs.yml@self parameters: versionNumberOverride: ${{ parameters.versionNumberOverride }} - dotnetVersion: ${{ parameters.dotnetVersion}} + installDotNet: true - task: UsePythonVersion@0 displayName: 'Use Python 3.11' diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index e82c08dd77..55aa6cdb21 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -1,6 +1,6 @@ parameters: -- name: dotnetVersion - type: string +- name: installDotNet + type: boolean steps: - checkout: self @@ -10,7 +10,7 @@ steps: fetchDepth: 0 - template: /azure-pipelines/prereqs.yml@self parameters: - dotnetVersion: ${{ parameters.dotnetVersion}} + installDotNet: ${{ parameters.installDotNet }} - pwsh: npm run package displayName: 'Build' diff --git a/azure-pipelines/dotnet-variables.yml b/azure-pipelines/dotnet-variables.yml deleted file mode 100644 index 9381ea25dc..0000000000 --- a/azure-pipelines/dotnet-variables.yml +++ /dev/null @@ -1,3 +0,0 @@ -variables: -- name: defaultDotnetVersion - value: '8.0.403' \ No newline at end of file diff --git a/azure-pipelines/prereqs.yml b/azure-pipelines/prereqs.yml index 3932f029d8..f8748db708 100644 --- a/azure-pipelines/prereqs.yml +++ b/azure-pipelines/prereqs.yml @@ -2,8 +2,8 @@ parameters: - name: versionNumberOverride type: string default: 'default' - - name: dotnetVersion - type: string + - name: installDotNet + type: boolean steps: @@ -14,11 +14,13 @@ steps: # Some tests use predefined docker images with a specific version of .NET installed. # So we avoid installing .NET in those cases. -- ${{ if parameters.dotnetVersion }}: +- ${{ if parameters.installDotNet }}: - task: UseDotNet@2 displayName: 'Install .NET SDK' inputs: - version: ${{ parameters.dotnetVersion }} + useGlobalJson: true + workingDirectory: $(Build.SourcesDirectory)/msbuild + - script: dotnet --info displayName: Display dotnet info diff --git a/azure-pipelines/profiling.yml b/azure-pipelines/profiling.yml index f3edf29fdc..ac97a7cfd3 100644 --- a/azure-pipelines/profiling.yml +++ b/azure-pipelines/profiling.yml @@ -14,8 +14,6 @@ variables: value: $(Build.SourcesDirectory)/out/profiling/merged/ - name: LOGS_DIRECTORY value: $(Build.SourcesDirectory)/out/logs/ -- template: /azure-pipelines/dotnet-variables.yml@self - resources: repositories: @@ -54,7 +52,7 @@ extends: steps: - template: /azure-pipelines/test.yml@self parameters: - dotnetVersion: $(defaultDotnetVersion) + installDotNet: true npmCommand: profiling testVSCodeVersion: stable isIntegration: true \ No newline at end of file diff --git a/azure-pipelines/test-matrix.yml b/azure-pipelines/test-matrix.yml index 1929d02203..822bb17c9c 100644 --- a/azure-pipelines/test-matrix.yml +++ b/azure-pipelines/test-matrix.yml @@ -6,8 +6,8 @@ parameters: - name: containerName type: string default: '' - - name: dotnetVersion - type: string + - name: installDotNet + type: boolean - name: installAdditionalLinuxDependencies type: boolean default: false @@ -40,7 +40,7 @@ jobs: steps: - template: /azure-pipelines/test.yml@self parameters: - dotnetVersion: ${{ parameters.dotnetVersion }} + installDotNet: ${{ parameters.installDotNet }} installAdditionalLinuxDependencies: ${{ parameters.installAdditionalLinuxDependencies }} npmCommand: $(npmCommand) testVSCodeVersion: ${{ parameters.testVSCodeVersion }} diff --git a/azure-pipelines/test-omnisharp.yml b/azure-pipelines/test-omnisharp.yml index 9337a1261c..9dfbc12eef 100644 --- a/azure-pipelines/test-omnisharp.yml +++ b/azure-pipelines/test-omnisharp.yml @@ -1,5 +1,5 @@ parameters: - - name: dotnetVersion + - name: installDotNet type: string - name: testVSCodeVersion type: string @@ -13,7 +13,7 @@ steps: - template: prereqs.yml parameters: - dotnetVersion: ${{ parameters.dotnetVersion }} + installDotNet: ${{ parameters.installDotNet }} - template: test-prereqs.yml diff --git a/azure-pipelines/test.yml b/azure-pipelines/test.yml index 8a5ced7660..0b0443b879 100644 --- a/azure-pipelines/test.yml +++ b/azure-pipelines/test.yml @@ -1,6 +1,6 @@ parameters: - - name: dotnetVersion - type: string + - name: installDotNet + type: boolean - name: installAdditionalLinuxDependencies type: boolean default: false @@ -20,7 +20,7 @@ steps: - template: prereqs.yml parameters: - dotnetVersion: ${{ parameters.dotnetVersion }} + installDotNet: ${{ parameters.installDotNet }} - ${{ if eq(parameters.installAdditionalLinuxDependencies, true) }}: - template: test-linux-docker-prereqs.yml diff --git a/azure-pipelines/validate-build.yml b/azure-pipelines/validate-build.yml index 2f9037d1e4..b66e77aef4 100644 --- a/azure-pipelines/validate-build.yml +++ b/azure-pipelines/validate-build.yml @@ -1,7 +1,3 @@ -parameters: -- name: dotnetVersion - type: string - stages: - stage: ValidateBuild displayName: 'Validate Build' @@ -16,7 +12,7 @@ stages: steps: - template: /azure-pipelines/build.yml@self parameters: - dotnetVersion: ${{ parameters.dotnetVersion }} + installDotNet: true - job: 'BuildLinux' displayName: 'Build Linux' @@ -27,7 +23,7 @@ stages: steps: - template: /azure-pipelines/build.yml@self parameters: - dotnetVersion: ${{ parameters.dotnetVersion }} + installDotNet: true - job: 'BuildDarwin' displayName: 'Build Darwin' @@ -38,4 +34,4 @@ stages: steps: - template: /azure-pipelines/build.yml@self parameters: - dotnetVersion: ${{ parameters.dotnetVersion }} \ No newline at end of file + installDotNet: true \ No newline at end of file diff --git a/global.json b/global.json deleted file mode 100644 index 40b6922e7f..0000000000 --- a/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "msbuild-sdks": { - "Microsoft.Build.NoTargets": "3.7.0" - } -} \ No newline at end of file diff --git a/msbuild/global.json b/msbuild/global.json new file mode 100644 index 0000000000..bcb55ab5eb --- /dev/null +++ b/msbuild/global.json @@ -0,0 +1,9 @@ +{ + "sdk": { + "version": "8.0.415", + "rollForward": "latestMajor" + }, + "msbuild-sdks": { + "Microsoft.Build.NoTargets": "3.7.0" + } +} \ No newline at end of file From cc1b26dac24084ae9d9bd48d954ccc1ae5a42faf Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 27 Oct 2025 14:13:08 -0700 Subject: [PATCH 082/105] Update Roslyn to 5.3.0-1.25524.13 --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 844971f63d..74c3fcb973 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.97.x +* Bump Roslyn to 5.3.0-1.25524.13 (PR: [#8723](https://github.com/dotnet/vscode-csharp/pull/8723)) + * Fix culture-sensitive StringBuilder.Append and ToString calls across codebase and add banned symbols (PR: [#80800](https://github.com/dotnet/roslyn/pull/80800)) + * Add support for autocompleting raw string quotes (PR: [#80871](https://github.com/dotnet/roslyn/pull/80871)) + * Don't add parenthesis when committing type with accessible nested type using dot (PR: [#80846](https://github.com/dotnet/roslyn/pull/80846)) + * Completion for `#:project` paths in file based programs (PR: [#80844](https://github.com/dotnet/roslyn/pull/80844)) + * Allow semantic tokens in Razor to be better behaved (PR: [#80815](https://github.com/dotnet/roslyn/pull/80815)) + * When searching for the original file from a PDB, only allow absolute paths (PR: [#80804](https://github.com/dotnet/roslyn/pull/80804)) * Bump Razor to 10.0.0-preview.25524.10 (PR: [#8721](https://github.com/dotnet/vscode-csharp/pull/8721)) * Add CodeAction to simplify fully-qualified component tags (PR: [#12379](https://github.com/dotnet/razor/pull/12379)) * Fix component and component attribute rename in cohosting (PR: [#12374](https://github.com/dotnet/razor/pull/12374)) diff --git a/package.json b/package.json index bc67c6a9ce..3fb2cc0404 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "workspace" ], "defaults": { - "roslyn": "5.3.0-1.25514.3", + "roslyn": "5.3.0-1.25524.13", "omniSharp": "1.39.14", "razor": "10.0.0-preview.25524.10", "razorOmnisharp": "7.0.0-preview.23363.1", From a8a29fd308ed3219f66ba9eee24acca46fa32e8f Mon Sep 17 00:00:00 2001 From: dotnet-maestro-bot Date: Tue, 28 Oct 2025 16:46:47 +0000 Subject: [PATCH 083/105] Update RoslynCopilot version to 18.3.72-alpha --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index bc67c6a9ce..d25af2dcdb 100644 --- a/package.json +++ b/package.json @@ -405,7 +405,7 @@ { "id": "RoslynCopilot", "description": "Language server for Roslyn Copilot integration", - "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.0.904-alpha.zip", + "url": "https://roslyn.blob.core.windows.net/releases/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer-18.3.72-alpha.zip", "installPath": ".roslynCopilot", "platforms": [ "neutral" @@ -414,7 +414,7 @@ "neutral" ], "installTestPath": "./.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll", - "integrity": "0BD733B23A706226F2B429AB0CE35576FB474493C8E19C7B88311007876DE5CC" + "integrity": "8F2F8B686D7E2FFD8E7C9AD980C5DE8FD1F0A6CFB5B6B1E13024EF6501E63D8E" }, { "id": "Debugger", From c01fc83ca87394927fd2ea8dc1f7ac5ec68ae003 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Oct 2025 20:56:40 +0000 Subject: [PATCH 084/105] Initial plan From 38e9e7634291ccb5aa5ba8d04576e4cf1aaa9ab3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Oct 2025 21:16:02 +0000 Subject: [PATCH 085/105] Add version helper and update snap tasks for new versioning scheme Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- jest.config.ts | 1 + tasks/snapTasks.ts | 66 ++++++++++++++++++++++++++++++-- tasks/testTasks.ts | 7 +++- test/tasks/jest.config.ts | 20 ++++++++++ test/tasks/versionHelper.test.ts | 59 ++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 test/tasks/jest.config.ts create mode 100644 test/tasks/versionHelper.test.ts diff --git a/jest.config.ts b/jest.config.ts index 7e79df195c..43dcd9327e 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -14,6 +14,7 @@ const config: Config = { '/test/razor/razorIntegrationTests/jest.config.ts', '/test/razor/razorTests/jest.config.ts', '/test/untrustedWorkspace/integrationTests/jest.config.ts', + '/test/tasks/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/snapTasks.ts b/tasks/snapTasks.ts index bea8efa285..27ce287516 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -10,6 +10,7 @@ import * as os from 'os'; import { exec } from 'child_process'; import { promisify } from 'util'; import { findTagsByVersion } from './gitTasks'; +import minimist from 'minimist'; const execAsync = promisify(exec); @@ -20,18 +21,51 @@ function logWarning(message: string, error?: unknown): void { } } +/** + * Calculate the next release (stable) version from the current version. + * Rounds up the minor version to the next tens version. + * @param currentVersion The current version in "major.minor" format (e.g., "2.74") + * @returns The next stable release version (e.g., "2.80") + */ +export function getNextReleaseVersion(currentVersion: string): string { + const split = currentVersion.split('.'); + const major = parseInt(split[0]); + const minor = parseInt(split[1]); + + // Round up to the next tens version + const nextTensMinor = Math.ceil((minor + 1) / 10) * 10; + + return `${major}.${nextTensMinor}`; +} + gulp.task('incrementVersion', async (): Promise => { + const argv = minimist(process.argv.slice(2)); + const isReleaseCandidate = argv['releaseCandidate'] === true || argv['releaseCandidate'] === 'true'; + // Get the current version from version.json const versionFilePath = path.join(path.resolve(__dirname, '..'), 'version.json'); const file = fs.readFileSync(versionFilePath, 'utf8'); const versionJson = JSON.parse(file); - // Increment the minor version + // Calculate new version const version = versionJson.version as string; const split = version.split('.'); - const newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; - - console.log(`Updating ${version} to ${newVersion}`); + let newVersion: string; + + if (isReleaseCandidate) { + // If this is a release candidate, increment to be higher than the next stable version + // e.g., if current is 2.74, next stable is 2.80, so main should be 2.81 + const nextStableVersion = getNextReleaseVersion(version); + const stableSplit = nextStableVersion.split('.'); + newVersion = `${stableSplit[0]}.${parseInt(stableSplit[1]) + 1}`; + console.log( + `Release candidate mode: Updating ${version} to ${newVersion} (next stable would be ${nextStableVersion})` + ); + } else { + // Normal increment: just increment the minor version + newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; + console.log(`Updating ${version} to ${newVersion}`); + } // Write the new version back to version.json versionJson.version = newVersion; @@ -186,3 +220,27 @@ async function generatePRList(startSHA: string, endSHA: string): Promise 2.80). + */ +gulp.task('updateVersionForRelease', async (): Promise => { + // Get the current version from version.json + const versionFilePath = path.join(path.resolve(__dirname, '..'), 'version.json'); + const file = fs.readFileSync(versionFilePath, 'utf8'); + const versionJson = JSON.parse(file); + + const currentVersion = versionJson.version as string; + const releaseVersion = getNextReleaseVersion(currentVersion); + + console.log(`Updating version from ${currentVersion} to stable release version ${releaseVersion}`); + + // Write the new version back to version.json + versionJson.version = releaseVersion; + const newJson = JSON.stringify(versionJson, null, 4); + console.log(`New json: ${newJson}`); + + fs.writeFileSync(versionFilePath, newJson); +}); diff --git a/tasks/testTasks.ts b/tasks/testTasks.ts index e063d463ba..d6c099c094 100644 --- a/tasks/testTasks.ts +++ b/tasks/testTasks.ts @@ -12,6 +12,7 @@ import { jestOmniSharpUnitTestProjectName } from '../test/omnisharp/omnisharpUni 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 { jestTasksTestProjectName } from '../test/tasks/jest.config'; import { getJUnitFileName, integrationTestProjects, @@ -46,7 +47,11 @@ function createUnitTestSubTasks() { await runJestTest(razorTestProjectName); }); - gulp.task('test:unit', gulp.series('test:unit:csharp', 'test:unit:razor')); + gulp.task('test:unit:tasks', async () => { + await runJestTest(jestTasksTestProjectName); + }); + + gulp.task('test:unit', gulp.series('test:unit:csharp', 'test:unit:razor', 'test:unit:tasks')); } function createIntegrationTestSubTasks() { diff --git a/test/tasks/jest.config.ts b/test/tasks/jest.config.ts new file mode 100644 index 0000000000..70d7886a5e --- /dev/null +++ b/test/tasks/jest.config.ts @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import type { Config } from 'jest'; +import { baseProjectConfig } from '../../baseJestConfig'; + +export const jestTasksTestProjectName = 'Tasks Unit Tests'; + +/** + * Defines a jest project configuration for tasks unit tests. + */ +const tasksTestConfig: Config = { + ...baseProjectConfig, + displayName: jestTasksTestProjectName, + modulePathIgnorePatterns: ['out'], + roots: ['', '../../__mocks__'], +}; + +export default tasksTestConfig; diff --git a/test/tasks/versionHelper.test.ts b/test/tasks/versionHelper.test.ts new file mode 100644 index 0000000000..3c39ab893a --- /dev/null +++ b/test/tasks/versionHelper.test.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getNextReleaseVersion } from '../../tasks/snapTasks'; +import { describe, test, expect } from '@jest/globals'; + +describe('getNextReleaseVersion', () => { + test('rounds up to next tens from single digit minor version', () => { + expect(getNextReleaseVersion('2.1')).toBe('2.10'); + expect(getNextReleaseVersion('2.5')).toBe('2.10'); + expect(getNextReleaseVersion('2.9')).toBe('2.10'); + }); + + test('rounds up to next tens from teens minor version', () => { + expect(getNextReleaseVersion('2.10')).toBe('2.20'); + expect(getNextReleaseVersion('2.15')).toBe('2.20'); + expect(getNextReleaseVersion('2.19')).toBe('2.20'); + }); + + test('rounds up to next tens from twenties minor version', () => { + expect(getNextReleaseVersion('2.20')).toBe('2.30'); + expect(getNextReleaseVersion('2.25')).toBe('2.30'); + expect(getNextReleaseVersion('2.29')).toBe('2.30'); + }); + + test('rounds up from 74 to 80', () => { + expect(getNextReleaseVersion('2.74')).toBe('2.80'); + }); + + test('rounds up from 75 to 80', () => { + expect(getNextReleaseVersion('2.75')).toBe('2.80'); + }); + + test('rounds up from 79 to 80', () => { + expect(getNextReleaseVersion('2.79')).toBe('2.80'); + }); + + test('rounds up from 80 to 90', () => { + expect(getNextReleaseVersion('2.80')).toBe('2.90'); + }); + + test('rounds up from 90 to 100', () => { + expect(getNextReleaseVersion('2.90')).toBe('2.100'); + }); + + test('works with different major versions', () => { + expect(getNextReleaseVersion('1.74')).toBe('1.80'); + expect(getNextReleaseVersion('3.55')).toBe('3.60'); + expect(getNextReleaseVersion('10.99')).toBe('10.100'); + }); + + test('handles version at exactly tens boundary', () => { + expect(getNextReleaseVersion('2.10')).toBe('2.20'); + expect(getNextReleaseVersion('2.20')).toBe('2.30'); + expect(getNextReleaseVersion('2.30')).toBe('2.40'); + }); +}); From 5d4858e197edeb814345d895ebe1f0de4b3aad8e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Oct 2025 21:19:24 +0000 Subject: [PATCH 086/105] Update GitHub workflow and documentation for new versioning scheme Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- .github/workflows/branch-snap.yml | 41 +++++++++++++++++++++++++++++-- CONTRIBUTING.md | 12 ++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/.github/workflows/branch-snap.yml b/.github/workflows/branch-snap.yml index 880b9b833e..4aa41517ed 100644 --- a/.github/workflows/branch-snap.yml +++ b/.github/workflows/branch-snap.yml @@ -1,6 +1,12 @@ name: Branch snap on: - workflow_dispatch + workflow_dispatch: + inputs: + releaseCandidate: + description: 'Is this a release candidate snap from main? (Will increment main version to be higher than next stable release)' + required: false + default: 'false' + type: boolean permissions: contents: write @@ -26,7 +32,12 @@ jobs: - name: Install dependencies run: npm ci - name: Update version.json - run: npx gulp incrementVersion + run: | + if [ "${{ github.event.inputs.releaseCandidate }}" = "true" ]; then + npx gulp incrementVersion --releaseCandidate=true + else + npx gulp incrementVersion + fi - name: Create version update PR uses: peter-evans/create-pull-request@v4 with: @@ -34,3 +45,29 @@ jobs: commit-message: Update main version title: '[automated] Update main version' branch: merge/update-main-version + + update-release-version: + needs: check-script + if: github.ref == 'refs/heads/prerelease' + runs-on: ubuntu-latest + steps: + - name: Check out merge branch + uses: actions/checkout@v2 + with: + ref: merge/prerelease-to-release + fetch-depth: 0 + - name: Install NodeJS + uses: actions/setup-node@v4 + with: + node-version: '18.x' + - name: Install dependencies + run: npm ci + - name: Update version.json for release + run: npx gulp updateVersionForRelease + - name: Commit and push version update + run: | + git config --local user.name "github-actions[bot]" + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git add version.json + git commit -m "Update version for stable release" + git push diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ad61d72a9a..b2aa05bbe2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -196,15 +196,25 @@ More details for this are [here] (https://devdiv.visualstudio.com/DevDiv/_git/Vi ## Snapping for releases Extension releases on the marketplace are done from the prerelease and release branches (corresponding to the prerelease or release version of the extension). Code flows from main -> prerelease -> release. Every week we snap main -> prerelease. Monthly, we snap prerelease -> release. +### Versioning Scheme +The extension follows a specific versioning scheme for releases: +- **Prerelease versions**: Use standard minor version increments (e.g., 2.74, 2.75, 2.76...) +- **Stable release versions**: Use the next tens version (e.g., 2.74 prerelease becomes 2.80 stable) +- **Main branch after RC snap**: Jumps to one above the next stable version (e.g., if snapping 2.74 as RC, main becomes 2.81) + ### Snap main -> prerelease The snap is done via the "Branch snap" github action. To run the snap from main -> prerelease, run the action via "Run workflow" and choose main as the base branch. ![branch snap action](./docs/images/main_snap.png) +When running the snap action, you can optionally check the "Is this a release candidate snap" checkbox. If checked: +- The prerelease branch will receive the snapped code with the current version (e.g., 2.74) +- The main branch version will be updated to be higher than the next stable release (e.g., 2.81, since the next stable would be 2.80) + This will generate two PRs that must be merged. One merging the main branch into prerelease, and the other bumps the version in main. ![generated prs](./docs/images/generated_prs.png) ### Snap prerelease -> release -To snap from prerelease to release, run the same action but use **prerelease** as the workflow branch. This will generate a single PR merging from prerelease to release. +To snap from prerelease to release, run the same action but use **prerelease** as the workflow branch. This will generate a PR merging from prerelease to release, and automatically update the version to the next stable release version (e.g., 2.74 -> 2.80) on the merge branch before the PR is merged. ### Marketplace release The marketplace release is managed by an internal AzDo pipeline. On the pipeline page, hit run pipeline. This will bring up the pipeline parameters to fill out: From 10b97f028a176dac983a7698a38b40b2080c25a9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Oct 2025 21:24:14 +0000 Subject: [PATCH 087/105] Update checkout action to v4 based on code review Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- .github/workflows/branch-snap.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/branch-snap.yml b/.github/workflows/branch-snap.yml index 4aa41517ed..31bb7d2f1a 100644 --- a/.github/workflows/branch-snap.yml +++ b/.github/workflows/branch-snap.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Install NodeJS uses: actions/setup-node@v4 with: @@ -52,7 +52,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out merge branch - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: ref: merge/prerelease-to-release fetch-depth: 0 From 10cdbbd402a3fcb9f566ca755c5c00c76e11ed44 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Oct 2025 21:47:32 +0000 Subject: [PATCH 088/105] Address code review feedback: refactor version helpers and workflow Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- .github/workflows/branch-snap.yml | 17 ++++----- tasks/snapTasks.ts | 57 +++++++++++++++++++------------ 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/.github/workflows/branch-snap.yml b/.github/workflows/branch-snap.yml index 31bb7d2f1a..f99b2530be 100644 --- a/.github/workflows/branch-snap.yml +++ b/.github/workflows/branch-snap.yml @@ -63,11 +63,12 @@ jobs: - name: Install dependencies run: npm ci - name: Update version.json for release - run: npx gulp updateVersionForRelease - - name: Commit and push version update - run: | - git config --local user.name "github-actions[bot]" - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git add version.json - git commit -m "Update version for stable release" - git push + run: npx gulp updateVersionForStableRelease + - name: Create PR with version update + uses: peter-evans/create-pull-request@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: Update version for stable release + title: '[automated] Update version for stable release' + branch: merge/prerelease-to-release + base: release diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index 27ce287516..4a1e0735fd 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -38,41 +38,59 @@ export function getNextReleaseVersion(currentVersion: string): string { return `${major}.${nextTensMinor}`; } +/** + * Read and parse version.json + * @returns The parsed version.json object + */ +function readVersionJson(): { version: string; [key: string]: unknown } { + const versionFilePath = path.join(path.resolve(__dirname, '..'), 'version.json'); + const file = fs.readFileSync(versionFilePath, 'utf8'); + return JSON.parse(file); +} + +/** + * Write version.json with the given version + * @param versionJson The version.json object to write + */ +function writeVersionJson(versionJson: { version: string; [key: string]: unknown }): void { + const versionFilePath = path.join(path.resolve(__dirname, '..'), 'version.json'); + const newJson = JSON.stringify(versionJson, null, 4); + console.log(`New json: ${newJson}`); + fs.writeFileSync(versionFilePath, newJson); +} + gulp.task('incrementVersion', async (): Promise => { const argv = minimist(process.argv.slice(2)); const isReleaseCandidate = argv['releaseCandidate'] === true || argv['releaseCandidate'] === 'true'; // Get the current version from version.json - const versionFilePath = path.join(path.resolve(__dirname, '..'), 'version.json'); - const file = fs.readFileSync(versionFilePath, 'utf8'); - const versionJson = JSON.parse(file); + const versionJson = readVersionJson(); // Calculate new version const version = versionJson.version as string; - const split = version.split('.'); - let newVersion: string; + let split: string[]; if (isReleaseCandidate) { // If this is a release candidate, increment to be higher than the next stable version // e.g., if current is 2.74, next stable is 2.80, so main should be 2.81 const nextStableVersion = getNextReleaseVersion(version); - const stableSplit = nextStableVersion.split('.'); - newVersion = `${stableSplit[0]}.${parseInt(stableSplit[1]) + 1}`; + split = nextStableVersion.split('.'); console.log( - `Release candidate mode: Updating ${version} to ${newVersion} (next stable would be ${nextStableVersion})` + `Release candidate mode: Updating ${version} to ${split[0]}.${ + parseInt(split[1]) + 1 + } (next stable would be ${nextStableVersion})` ); } else { // Normal increment: just increment the minor version - newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; - console.log(`Updating ${version} to ${newVersion}`); + split = version.split('.'); + console.log(`Updating ${version} to ${split[0]}.${parseInt(split[1]) + 1}`); } + const newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; + // Write the new version back to version.json versionJson.version = newVersion; - const newJson = JSON.stringify(versionJson, null, 4); - console.log(`New json: ${newJson}`); - - fs.writeFileSync(versionFilePath, newJson); + writeVersionJson(versionJson); // Add a new changelog section for the new version. console.log('Adding new version header to changelog'); @@ -226,11 +244,9 @@ async function generatePRList(startSHA: string, endSHA: string): Promise 2.80). */ -gulp.task('updateVersionForRelease', async (): Promise => { +gulp.task('updateVersionForStableRelease', async (): Promise => { // Get the current version from version.json - const versionFilePath = path.join(path.resolve(__dirname, '..'), 'version.json'); - const file = fs.readFileSync(versionFilePath, 'utf8'); - const versionJson = JSON.parse(file); + const versionJson = readVersionJson(); const currentVersion = versionJson.version as string; const releaseVersion = getNextReleaseVersion(currentVersion); @@ -239,8 +255,5 @@ gulp.task('updateVersionForRelease', async (): Promise => { // Write the new version back to version.json versionJson.version = releaseVersion; - const newJson = JSON.stringify(versionJson, null, 4); - console.log(`New json: ${newJson}`); - - fs.writeFileSync(versionFilePath, newJson); + writeVersionJson(versionJson); }); From 1c8a0b848d6b59c56468a8b289a830104e508ff4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Oct 2025 22:07:05 +0000 Subject: [PATCH 089/105] Simplify incrementVersion logic and remove workflow title Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- .github/workflows/branch-snap.yml | 1 - tasks/snapTasks.ts | 21 +++++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/.github/workflows/branch-snap.yml b/.github/workflows/branch-snap.yml index f99b2530be..3566c38b4a 100644 --- a/.github/workflows/branch-snap.yml +++ b/.github/workflows/branch-snap.yml @@ -69,6 +69,5 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: Update version for stable release - title: '[automated] Update version for stable release' branch: merge/prerelease-to-release base: release diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index 4a1e0735fd..a8c25d99ef 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -67,26 +67,15 @@ gulp.task('incrementVersion', async (): Promise => { const versionJson = readVersionJson(); // Calculate new version - const version = versionJson.version as string; - let split: string[]; - + let version = versionJson.version as string; if (isReleaseCandidate) { - // If this is a release candidate, increment to be higher than the next stable version - // e.g., if current is 2.74, next stable is 2.80, so main should be 2.81 - const nextStableVersion = getNextReleaseVersion(version); - split = nextStableVersion.split('.'); - console.log( - `Release candidate mode: Updating ${version} to ${split[0]}.${ - parseInt(split[1]) + 1 - } (next stable would be ${nextStableVersion})` - ); - } else { - // Normal increment: just increment the minor version - split = version.split('.'); - console.log(`Updating ${version} to ${split[0]}.${parseInt(split[1]) + 1}`); + version = getNextReleaseVersion(version); + console.log(`Release candidate, using base version of ${version}`); } + const split = version.split('.'); const newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; + console.log(`Updating ${versionJson.version} to ${newVersion}`); // Write the new version back to version.json versionJson.version = newVersion; From 1a3eae2c1fee8b3b99c3e4c3d2e3e471750b1dde Mon Sep 17 00:00:00 2001 From: Rikki Gibson Date: Tue, 28 Oct 2025 16:39:40 -0700 Subject: [PATCH 090/105] Update target framework in Razor integration test (#8729) --- .../razorIntegrationTests/testAssets/RazorApp/RazorApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/razor/razorIntegrationTests/testAssets/RazorApp/RazorApp.csproj b/test/razor/razorIntegrationTests/testAssets/RazorApp/RazorApp.csproj index 253687171b..801a679360 100644 --- a/test/razor/razorIntegrationTests/testAssets/RazorApp/RazorApp.csproj +++ b/test/razor/razorIntegrationTests/testAssets/RazorApp/RazorApp.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 enable enable RazorApp From a48545116980a408f1d0775e947792324498ad97 Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Wed, 29 Oct 2025 05:01:44 +0000 Subject: [PATCH 091/105] Update main CHANGELOG --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74c3fcb973..70da45c9b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.97.x +* Update target framework in Razor integration test (PR: [#8729](https://github.com/dotnet/vscode-csharp/pull/8729)) +* Use global.json with rollforward instead of pipeline versions (PR: [#8722](https://github.com/dotnet/vscode-csharp/pull/8722)) +* Update RoslynCopilot url to 18.3.72-alpha (PR: [#8726](https://github.com/dotnet/vscode-csharp/pull/8726)) +* Add group ids to configuration groups (PR: [#8720](https://github.com/dotnet/vscode-csharp/pull/8720)) +* [WIP] Update job execution order for bump-main-version (PR: [#8717](https://github.com/dotnet/vscode-csharp/pull/8717)) +* Update CHANGELOG for version 2.97.x (PR: [#8716](https://github.com/dotnet/vscode-csharp/pull/8716)) * Bump Roslyn to 5.3.0-1.25524.13 (PR: [#8723](https://github.com/dotnet/vscode-csharp/pull/8723)) * Fix culture-sensitive StringBuilder.Append and ToString calls across codebase and add banned symbols (PR: [#80800](https://github.com/dotnet/roslyn/pull/80800)) * Add support for autocompleting raw string quotes (PR: [#80871](https://github.com/dotnet/roslyn/pull/80871)) From 981b1feac3e1571471c4705ed1ea97d898ef0d4b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 18:29:42 +0000 Subject: [PATCH 092/105] Extract changelog helper and add stable release changelog entry Co-authored-by: dibarbet <5749229+dibarbet@users.noreply.github.com> --- tasks/snapTasks.ts | 65 +++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/tasks/snapTasks.ts b/tasks/snapTasks.ts index a8c25d99ef..fa7ef62279 100644 --- a/tasks/snapTasks.ts +++ b/tasks/snapTasks.ts @@ -59,29 +59,12 @@ function writeVersionJson(versionJson: { version: string; [key: string]: unknown fs.writeFileSync(versionFilePath, newJson); } -gulp.task('incrementVersion', async (): Promise => { - const argv = minimist(process.argv.slice(2)); - const isReleaseCandidate = argv['releaseCandidate'] === true || argv['releaseCandidate'] === 'true'; - - // Get the current version from version.json - const versionJson = readVersionJson(); - - // Calculate new version - let version = versionJson.version as string; - if (isReleaseCandidate) { - version = getNextReleaseVersion(version); - console.log(`Release candidate, using base version of ${version}`); - } - - const split = version.split('.'); - const newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; - console.log(`Updating ${versionJson.version} to ${newVersion}`); - - // Write the new version back to version.json - versionJson.version = newVersion; - writeVersionJson(versionJson); - - // Add a new changelog section for the new version. +/** + * Add a new version section to the changelog + * @param version The version to add (e.g., "2.75") + * @param additionalLines Optional additional lines to add after the version header + */ +function addChangelogSection(version: string, additionalLines?: string[]): void { console.log('Adding new version header to changelog'); const changelogPath = path.join(path.resolve(__dirname, '..'), 'CHANGELOG.md'); @@ -112,10 +95,41 @@ gulp.task('incrementVersion', async (): Promise => { // Insert a new header for the new version after the known issues header but before the next header. const lineToInsertAt = matches[knownIssuesIndex + 1].line - 1; console.log(`Inserting new version header at line ${lineToInsertAt}`); - const linesToInsert = ['', `# ${newVersion}.x`]; + const linesToInsert = ['', `# ${version}.x`]; + + // Add any additional lines if provided + if (additionalLines && additionalLines.length > 0) { + linesToInsert.push(...additionalLines); + } changelogLines.splice(lineToInsertAt, 0, ...linesToInsert); fs.writeFileSync(changelogPath, changelogLines.join(os.EOL)); +} + +gulp.task('incrementVersion', async (): Promise => { + const argv = minimist(process.argv.slice(2)); + const isReleaseCandidate = argv['releaseCandidate'] === true || argv['releaseCandidate'] === 'true'; + + // Get the current version from version.json + const versionJson = readVersionJson(); + + // Calculate new version + let version = versionJson.version as string; + if (isReleaseCandidate) { + version = getNextReleaseVersion(version); + console.log(`Release candidate, using base version of ${version}`); + } + + const split = version.split('.'); + const newVersion = `${split[0]}.${parseInt(split[1]) + 1}`; + console.log(`Updating ${versionJson.version} to ${newVersion}`); + + // Write the new version back to version.json + versionJson.version = newVersion; + writeVersionJson(versionJson); + + // Add a new changelog section for the new version. + addChangelogSection(newVersion); }); gulp.task('updateChangelog', async (): Promise => { @@ -245,4 +259,7 @@ gulp.task('updateVersionForStableRelease', async (): Promise => { // Write the new version back to version.json versionJson.version = releaseVersion; writeVersionJson(versionJson); + + // Add a new changelog section for the release version that references the prerelease + addChangelogSection(releaseVersion, [`* See ${currentVersion}.x for full list of changes.`]); }); From a9a1b2d07b171f97ac94a50ebf424a203529e08b Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 30 Oct 2025 15:12:51 -0700 Subject: [PATCH 093/105] Add instructions for creating private feedback --- SUPPORT.md | 14 ++++++++++++-- docs/images/developer_community_feedback.png | Bin 0 -> 127377 bytes 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 docs/images/developer_community_feedback.png diff --git a/SUPPORT.md b/SUPPORT.md index 13dac4a04e..a8ad2ebc88 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -107,7 +107,7 @@ If you encounter issues with document classification (e.g., incorrect syntax hig For issues with diagnostics, please provide values of the background analysis scope options, `dotnet.backgroundAnalysis.analyzerDiagnosticsScope` and `dotnet.backgroundAnalysis.compilerDiagnosticsScope` ![background analysis settings](./docs/images/background_analysis.png) -#### Language server crashing +### Language server crashing If the language server crashes, general logs are often helpful for diagnosing the issue. However, in some cases, logs alone may not provide enough information and we may need a crash dump. Follow these steps to collect a crash dump: - Set the `dotnet.server.crashDumpPath` setting in VSCode to a user-writable folder where crash dumps can be saved. @@ -117,7 +117,7 @@ If the language server crashes, general logs are often helpful for diagnosing th > [!WARNING] > The dump can contain detailed information on the project - generally we will provide an email so that it can be shared privately -#### Recording a language server trace +### Recording a language server trace When investigating performance issues, we may request a performance trace of the language server to diagnose what is causing the problem. These are typically taken via [dotnet-trace](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-trace) (a cross platform tool to collect performance traces of .NET processes) @@ -132,6 +132,16 @@ The C# extension has a built in command, `csharp.recordLanguageServerTrace` to h ![alt text](docs/images/recordTraceTerminal.png) 5. Share the trace. Note that the trace may contain PII, so generally we will provide an email or other confidential way to share the trace with us. +### Sharing information privately +Detailed logs, dumps, traces, and other information can sometimes contain private information that you do not wish to share publicly. Instead, you can utilize the Developer Community page to share these privately to Microsoft. + +1. Go to https://developercommunity.visualstudio.com/dotnet/report +2. Fill in the issue title, reference the GitHub issue in the description, and upload the attachments +![developer community feedback page](docs/images/developer_community_feedback.png) +3. Once created, a comment on the GitHub issue a link to the new Developer Community ticket. + + + ## Microsoft Support Policy Support for this project is limited to the resources listed above. diff --git a/docs/images/developer_community_feedback.png b/docs/images/developer_community_feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..72a5526bd8ab928887b9277af968a34bfca9480f GIT binary patch literal 127377 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%0A5I-SL2-OreWrv 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 literal 0 HcmV?d00001 From 32287bdae2b17d986ae19630163d6f366913d4c6 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Mon, 3 Nov 2025 11:25:13 +1100 Subject: [PATCH 094/105] Bump Razor to 10.0.0-preview.25552.2 --- CHANGELOG.md | 7 ++++++- package.json | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70da45c9b0..67de0645e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,9 +17,14 @@ * Completion for `#:project` paths in file based programs (PR: [#80844](https://github.com/dotnet/roslyn/pull/80844)) * Allow semantic tokens in Razor to be better behaved (PR: [#80815](https://github.com/dotnet/roslyn/pull/80815)) * When searching for the original file from a PDB, only allow absolute paths (PR: [#80804](https://github.com/dotnet/roslyn/pull/80804)) -* Bump Razor to 10.0.0-preview.25524.10 (PR: [#8721](https://github.com/dotnet/vscode-csharp/pull/8721)) +* Bump Razor to 10.0.0-preview.25552.2 (PR: [#8734](https://github.com/dotnet/vscode-csharp/pull/8734)) * Add CodeAction to simplify fully-qualified component tags (PR: [#12379](https://github.com/dotnet/razor/pull/12379)) * Fix component and component attribute rename in cohosting (PR: [#12374](https://github.com/dotnet/razor/pull/12374)) + * Fix formatting of mixed indentation in VS Code (PR: [#12418](https://github.com/dotnet/razor/pull/12418)) + * Allow cohosting quick info to show html tag information even when on a taghelper or component tag. (PR: [#12415](https://github.com/dotnet/razor/pull/12415)) + * Fix(ish) formatting of RenderFragments (C# templates) (PR: [#12397](https://github.com/dotnet/razor/pull/12397)) + * Drop Html edits that would split a C# literal across multiple lines (PR: [#12396](https://github.com/dotnet/razor/pull/12396)) + * Fix completion resolve for provisional completion (PR: [#12403](https://github.com/dotnet/razor/pull/12403)) # 2.96.x * Update Debugger to v2.95.0 (PR: [#8710](https://github.com/dotnet/vscode-csharp/pull/8710)) diff --git a/package.json b/package.json index 1f9841dcbf..81ee5ecfdc 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "defaults": { "roslyn": "5.3.0-1.25524.13", "omniSharp": "1.39.14", - "razor": "10.0.0-preview.25524.10", + "razor": "10.0.0-preview.25552.2", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "18.0.11023.10" }, From 4d1d426fbc278d5b77c6abebd8312ad6c0ff3dad Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Mon, 3 Nov 2025 17:07:30 -0800 Subject: [PATCH 095/105] Revert "Update Debugger to v2.95.0" (#8736) --- package.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 1f9841dcbf..e950d1d551 100644 --- a/package.json +++ b/package.json @@ -419,7 +419,7 @@ { "id": "Debugger", "description": ".NET Core Debugger (Windows / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-win7-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-win7-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "win32" @@ -429,12 +429,12 @@ "arm64" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui.exe", - "integrity": "9A8766F5B62BC2D7AE80016323B093AD75E822399329DEA32C282187005EBE38" + "integrity": "C25E19B3DBAE55DBBBD7384561E34064CDB92633A816FFB862E68635221A63EC" }, { "id": "Debugger", "description": ".NET Core Debugger (Windows / ARM64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-win10-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-win10-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "win32" @@ -443,12 +443,12 @@ "arm64" ], "installTestPath": "./.debugger/arm64/vsdbg-ui.exe", - "integrity": "6D495C5DA79179ED78DE03C6C623A4BC022919A58FAC486506DC5917EC68F426" + "integrity": "F8F9DE062D0678CFF808B8BC9AADC59C7C39253B1249DE2F9CF3037163D8049F" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-osx-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-osx-x64.zip", "installPath": ".debugger/x86_64", "platforms": [ "darwin" @@ -462,12 +462,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/x86_64/vsdbg-ui", - "integrity": "72A0BFD3F43D7B3C5CC2091BFB5385BF767370AC59FE88548E28912714FEB4D7" + "integrity": "D1817389B6A1254BDDD8798AD866D6E1AC47740D05E138C060C387C0A53A7925" }, { "id": "Debugger", "description": ".NET Core Debugger (macOS / arm64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-osx-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-osx-arm64.zip", "installPath": ".debugger/arm64", "platforms": [ "darwin" @@ -480,12 +480,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/arm64/vsdbg-ui", - "integrity": "08DFFB990A9CBD1A74405C0FB601C3136021E4CBB7ADB2ACEA9A36EBFEB651FE" + "integrity": "089C742676FD1627ECCF3AAF1643ECCFC654FCED9C0D1E803780CB9C2E1FE355" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-arm.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-arm.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -498,12 +498,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "1D7E7A1B260347C5D6BFF4BC63FF23A01315B3E180356B3F6E3A974677A3D9C4" + "integrity": "64DF1D83556A3E33664122B10D94787AF10E54129362D6E8A63F8AA3B47035D3" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / ARM64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-arm64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -516,12 +516,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "27C2301B9DB13FBF26579788084981ED4C516646D296ECD8CAE40E0FDDE5C042" + "integrity": "578A61AE844470B7D1814AA8A0A49E21069F68CA16F661648AF85F68DC08BC9D" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-musl-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-musl-x64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -534,12 +534,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "DD8BC256154E2BD13974D0ACDA2B2EA58593ABB7A553270487A74E0CDDA83249" + "integrity": "5636C90B08D2849C13E198036B467F73080694CC9D5BF7422B04EA25B27633F9" }, { "id": "Debugger", "description": ".NET Core Debugger (linux musl / ARM64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-musl-arm64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-musl-arm64.zip", "installPath": ".debugger", "platforms": [ "linux-musl" @@ -552,12 +552,12 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "1EC09737FA083099F2A03B9B7DF70E813B602A4FCAB50B3FD0CB6F2C46D127F1" + "integrity": "BF668378285B814949F39718D559D976C7ED0C1575A248370F282210AF513B2E" }, { "id": "Debugger", "description": ".NET Core Debugger (linux / x64)", - "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-95-0/coreclr-debug-linux-x64.zip", + "url": "https://vsdebugger-cyg0dxb6czfafzaz.b01.azurefd.net/coreclr-debug-2-90-0/coreclr-debug-linux-x64.zip", "installPath": ".debugger", "platforms": [ "linux" @@ -570,7 +570,7 @@ "./vsdbg" ], "installTestPath": "./.debugger/vsdbg-ui", - "integrity": "2B0920ADEC91DA9CE18026CD020488A603C904B4DBE80B30B61337F38B6533F9" + "integrity": "085CDC403578B24F8335BAFA1B7D62E48FFFEE80419DFA41C6D48D8DBADF95D7" }, { "id": "RazorOmnisharp", From e33f757e5ecf89b634d3a2b2fdd413ac51044ca6 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Tue, 4 Nov 2025 10:10:32 -0800 Subject: [PATCH 096/105] Update VM image to macOS-15 in pipeline --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d6ba8f19dc..28ad63bfeb 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -125,7 +125,7 @@ stages: testVSCodeVersion: $(testVSCodeVersion) pool: name: Azure Pipelines - vmImage: macOS-13 + vmImage: macOS-15 - stage: Test_OmniSharp displayName: Test OmniSharp From 8f4dd87b61e9e0135aabe1bdd03ae2079e5ad51a Mon Sep 17 00:00:00 2001 From: Kirill Ovchinnikov Date: Tue, 4 Nov 2025 15:01:02 +0100 Subject: [PATCH 097/105] Bump xamlTools to fix "Color" auto-completion and code navigation --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 65bf03e010..bb1c2f40f4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "omniSharp": "1.39.14", "razor": "10.0.0-preview.25552.2", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "18.0.11023.10" + "xamlTools": "18.3.11128.18" }, "main": "./dist/extension", "l10n": "./l10n", @@ -5642,4 +5642,4 @@ } } } -} \ No newline at end of file +} From 1dec96f3f3f8e2f4369e428c84403628de36bfb4 Mon Sep 17 00:00:00 2001 From: Kirill Ovchinnikov Date: Tue, 4 Nov 2025 15:06:47 +0100 Subject: [PATCH 098/105] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67de0645e1..b1095a7623 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.97.x +* Bump xamlTools to 18.3.11128.18 (PR: [#8669](https://github.com/dotnet/vscode-csharp/pull/8740)) * Update target framework in Razor integration test (PR: [#8729](https://github.com/dotnet/vscode-csharp/pull/8729)) * Use global.json with rollforward instead of pipeline versions (PR: [#8722](https://github.com/dotnet/vscode-csharp/pull/8722)) * Update RoslynCopilot url to 18.3.72-alpha (PR: [#8726](https://github.com/dotnet/vscode-csharp/pull/8726)) From e31551e8577f482352c3d94fef2a7024066d7163 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 4 Nov 2025 12:11:42 -0800 Subject: [PATCH 099/105] Update setting documentation for on auto insert --- package.nls.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.nls.json b/package.nls.json index 58dfcafad3..aec726d744 100644 --- a/package.nls.json +++ b/package.nls.json @@ -24,7 +24,7 @@ "command.dotnet.test.runTestsInContext": "Run Tests in Context", "command.dotnet.test.debugTestsInContext": "Debug Tests in Context", "command.dotnet.restartServer": "Restart Language Server", - "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic insertion of documentation comments.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.formatting.organizeImportsOnFormat": "Specifies whether 'using' directives should be grouped and sorted during document formatting. (Previously `omnisharp.organizeImportsOnFormat`)", "configuration.dotnet.defaultSolution.description": "The path of the default solution to be opened in the workspace, or set to 'disable' to skip it. (Previously `omnisharp.defaultLaunchSolution`)", "configuration.dotnet.server.path": "Specifies the absolute path to the server (LSP or O#) executable. When left empty the version pinned to the C# Extension is used. (Previously `omnisharp.path`)", From 5bfa79b1c9af4f676b55dce33ffffae56c419794 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Tue, 4 Nov 2025 12:18:19 -0800 Subject: [PATCH 100/105] Update roslyn to 5.3.0-2.25553.6 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67de0645e1..f6ccad829e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,10 @@ * Add group ids to configuration groups (PR: [#8720](https://github.com/dotnet/vscode-csharp/pull/8720)) * [WIP] Update job execution order for bump-main-version (PR: [#8717](https://github.com/dotnet/vscode-csharp/pull/8717)) * Update CHANGELOG for version 2.97.x (PR: [#8716](https://github.com/dotnet/vscode-csharp/pull/8716)) -* Bump Roslyn to 5.3.0-1.25524.13 (PR: [#8723](https://github.com/dotnet/vscode-csharp/pull/8723)) +* Bump Roslyn to 5.3.0-2.25553.6 (PR: [#8743](https://github.com/dotnet/vscode-csharp/pull/8743)) + * Support LSP includeDeclaration field in find all references (PR: [#80965](https://github.com/dotnet/roslyn/pull/80965)) + * Add support for lineFoldingOnly folding ranges (PR: [#80955](https://github.com/dotnet/roslyn/pull/80955)) + * Expand `#error version` output to include compiler assembly path and use full commit SHA everywhere (PR: [#80894](https://github.com/dotnet/roslyn/pull/80894)) * Fix culture-sensitive StringBuilder.Append and ToString calls across codebase and add banned symbols (PR: [#80800](https://github.com/dotnet/roslyn/pull/80800)) * Add support for autocompleting raw string quotes (PR: [#80871](https://github.com/dotnet/roslyn/pull/80871)) * Don't add parenthesis when committing type with accessible nested type using dot (PR: [#80846](https://github.com/dotnet/roslyn/pull/80846)) diff --git a/package.json b/package.json index 65bf03e010..180cbf8f2d 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "workspace" ], "defaults": { - "roslyn": "5.3.0-1.25524.13", + "roslyn": "5.3.0-2.25553.6", "omniSharp": "1.39.14", "razor": "10.0.0-preview.25552.2", "razorOmnisharp": "7.0.0-preview.23363.1", From 01dd5848dd9318a6e57ced167d3d90d219c2d16b Mon Sep 17 00:00:00 2001 From: Rikki Gibson Date: Tue, 4 Nov 2025 13:51:54 -0800 Subject: [PATCH 101/105] Add integration test for restore of file-based programs (#8470) --- CONTRIBUTING.md | 4 +- azure-pipelines.yml | 28 ++++++++- azure-pipelines/test-linux-docker-prereqs.yml | 2 +- .../completion.integration.test.ts | 26 ++------ .../fileBasedPrograms.integration.test.ts | 59 +++++++++++++++++++ .../integrationTests/integrationHelpers.ts | 33 ++++++++++- .../src/scripts/Directory.Build.props | 6 ++ .../slnWithCsproj/src/scripts/app1.cs | 4 ++ .../integrationTests/testHooks.ts | 21 +++++++ 9 files changed, 157 insertions(+), 26 deletions(-) create mode 100644 test/lsptoolshost/integrationTests/fileBasedPrograms.integration.test.ts create mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/Directory.Build.props create mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/app1.cs create mode 100644 test/lsptoolshost/integrationTests/testHooks.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b2aa05bbe2..a2ade83006 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -64,9 +64,9 @@ To debug unit tests locally, press F5 in VS Code with the "Launch Tes To debug integration tests 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 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/lsptoolshost`, use either `[Roslyn] Run Current File Integration Test` or `[DevKit] Launch Current File Integration Tests` (to run tests using C# + C# Dev Kit) - For integration tests inside `test/razor`, use `[Razor] Run Current File Integration Test` - - For integration tests inside `test/omnisharp`, use one of the `Omnisharp:` current file profiles + - For integration tests inside `test/omnisharp`, use one of the `[O#] Run Current File Integration Test` current file profiles These will allow you to actually debug the test, but the 'Razor integration tests' configuration does not. diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 28ad63bfeb..bee7392a24 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -72,6 +72,8 @@ stages: - stage: displayName: Test Linux (.NET 8) dependsOn: [] + variables: + ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS: 'true' jobs: - template: azure-pipelines/test-matrix.yml parameters: @@ -83,11 +85,13 @@ stages: pool: name: NetCore-Public demands: ImageOverride -equals 1es-ubuntu-2004-open - containerName: mcr.microsoft.com/dotnet/sdk:8.0 + containerName: mcr.microsoft.com/dotnet/sdk:8.0-noble - stage: displayName: Test Linux (.NET 9) dependsOn: [] + variables: + ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS: 'true' jobs: - template: azure-pipelines/test-matrix.yml parameters: @@ -99,11 +103,29 @@ stages: pool: name: NetCore-Public demands: ImageOverride -equals 1es-ubuntu-2004-open - containerName: mcr.microsoft.com/dotnet/sdk:9.0 + containerName: mcr.microsoft.com/dotnet/sdk:9.0-noble + +- stage: + displayName: Test Linux (.NET 10) + dependsOn: [] + jobs: + - template: azure-pipelines/test-matrix.yml + parameters: + os: linux + # Prefer the dotnet from the container. + installDotNet: false + testVSCodeVersion: $(testVSCodeVersion) + installAdditionalLinuxDependencies: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-ubuntu-2004-open + containerName: mcr.microsoft.com/dotnet/sdk:10.0.100-rc.2-noble - stage: Test_Windows_Stage displayName: Test Windows dependsOn: [] + variables: + ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS: 'true' jobs: - template: azure-pipelines/test-matrix.yml parameters: @@ -117,6 +139,8 @@ stages: - stage: Test_MacOS_Stage displayName: Test MacOS dependsOn: [] + variables: + ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS: 'true' jobs: - template: azure-pipelines/test-matrix.yml parameters: diff --git a/azure-pipelines/test-linux-docker-prereqs.yml b/azure-pipelines/test-linux-docker-prereqs.yml index e89c6bdcfc..70a1a81a6b 100644 --- a/azure-pipelines/test-linux-docker-prereqs.yml +++ b/azure-pipelines/test-linux-docker-prereqs.yml @@ -13,7 +13,7 @@ steps: # Installing the dependencies requires root, but the docker image we're using doesn't have root permissions (nor sudo) # We can exec as root from outside the container from the host machine. # Really we should create our own image with these pre-installed, but we'll need to figure out how to publish the image. -- script: docker exec --user root $(containerId) bash -c 'apt-get update -y && apt-get install -y libglib2.0-0 libnss3 libatk-bridge2.0-dev libdrm2 libgtk-3-0 libgbm-dev libasound2 xvfb' +- script: docker exec --user root $(containerId) bash -c 'apt-get update -y && apt-get install -y libglib2.0-0 libnss3 libatk-bridge2.0-dev libdrm2 libgtk-3-0 libgbm-dev libasound2t64 xvfb' displayName: 'Install additional Linux dependencies' target: host condition: eq(variables['Agent.OS'], 'Linux') \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/completion.integration.test.ts b/test/lsptoolshost/integrationTests/completion.integration.test.ts index fa3a150082..4924a9a99a 100644 --- a/test/lsptoolshost/integrationTests/completion.integration.test.ts +++ b/test/lsptoolshost/integrationTests/completion.integration.test.ts @@ -7,7 +7,12 @@ 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, openFileInWorkspaceAsync } from './integrationHelpers'; +import { + activateCSharpExtension, + closeAllEditorsAsync, + getCompletionsAsync, + openFileInWorkspaceAsync, +} from './integrationHelpers'; describe(`Completion Tests`, () => { beforeAll(async () => { @@ -70,23 +75,4 @@ describe(`Completion Tests`, () => { expect(methodOverrideLine).toContain('override void Method(NeedsImport n)'); expect(methodOverrideImplLine).toContain('base.Method(n);'); }); - - async function getCompletionsAsync( - position: vscode.Position, - triggerCharacter: string | undefined, - completionsToResolve: number - ): Promise { - const activeEditor = vscode.window.activeTextEditor; - if (!activeEditor) { - throw new Error('No active editor'); - } - - return await vscode.commands.executeCommand( - 'vscode.executeCompletionItemProvider', - activeEditor.document.uri, - position, - triggerCharacter, - completionsToResolve - ); - } }); diff --git a/test/lsptoolshost/integrationTests/fileBasedPrograms.integration.test.ts b/test/lsptoolshost/integrationTests/fileBasedPrograms.integration.test.ts new file mode 100644 index 0000000000..3f87d61e9b --- /dev/null +++ b/test/lsptoolshost/integrationTests/fileBasedPrograms.integration.test.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- + * 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, + getCompletionsAsync, + openFileInWorkspaceAsync, + revertActiveFile, + waitForAllAsyncOperationsAsync, + waitForExpectedResult, + describeIfFileBasedPrograms, +} from './integrationHelpers'; +import { beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; +import { CSharpExtensionExports } from '../../../src/csharpExtensionExports'; + +describeIfFileBasedPrograms(`File-based Programs Tests`, () => { + let exports: CSharpExtensionExports; + + beforeAll(async () => { + process.env.RoslynWaiterEnabled = 'true'; + exports = await activateCSharpExtension(); + }); + + beforeEach(async () => { + await openFileInWorkspaceAsync(path.join('src', 'scripts', 'app1.cs')); + }); + + afterEach(async () => { + await revertActiveFile(); + await closeAllEditorsAsync(); + }); + + afterAll(async () => { + await testAssetWorkspace.cleanupWorkspace(); + }); + + test('Inserting package directive triggers a restore', async () => { + await vscode.window.activeTextEditor!.edit((editBuilder) => { + editBuilder.insert(new vscode.Position(0, 0), '#:package Newtonsoft.Json@13.0.3'); + editBuilder.insert(new vscode.Position(1, 0), 'using Newton'); + }); + await vscode.window.activeTextEditor!.document.save(); + await waitForAllAsyncOperationsAsync(exports); + + const position = new vscode.Position(1, 'using Newton'.length); + await waitForExpectedResult( + async () => getCompletionsAsync(position, undefined, 10), + 10 * 1000, + 100, + (completionItems) => expect(completionItems.items.map((item) => item.label)).toContain('Newtonsoft') + ); + }); +}); diff --git a/test/lsptoolshost/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts index b4e2e8ea90..4f87296490 100644 --- a/test/lsptoolshost/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -12,8 +12,9 @@ import { ServerState } from '../../../src/lsptoolshost/server/languageServerEven import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { EOL, platform } from 'os'; import { describe, expect, test } from '@jest/globals'; +import { WaitForAsyncOperationsRequest } from './testHooks'; -export async function activateCSharpExtension(): Promise { +export async function activateCSharpExtension(): Promise { const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); if (!csharpExtension) { throw new Error('Failed to find installation of ms-dotnettools.csharp'); @@ -53,6 +54,8 @@ export async function activateCSharpExtension(): Promise { if (shouldRestart) { await restartLanguageServer(); } + + return csharpExtension.exports; } export function usingDevKit(): boolean { @@ -113,6 +116,25 @@ export function isSlnWithGenerator(workspace: typeof vscode.workspace) { return isGivenSln(workspace, 'slnWithGenerator'); } +export async function getCompletionsAsync( + position: vscode.Position, + triggerCharacter: string | undefined, + completionsToResolve: number +): Promise { + const activeEditor = vscode.window.activeTextEditor; + if (!activeEditor) { + throw new Error('No active editor'); + } + + return await vscode.commands.executeCommand( + 'vscode.executeCompletionItemProvider', + activeEditor.document.uri, + position, + triggerCharacter, + completionsToResolve + ); +} + export async function getCodeLensesAsync(): Promise { const activeEditor = vscode.window.activeTextEditor; if (!activeEditor) { @@ -278,6 +300,10 @@ export const testIfDevKit = testIf(usingDevKit()); export const testIfNotMacOS = testIf(!isMacOS()); export const testIfWindows = testIf(isWindows()); +const runFileBasedProgramsTests = process.env['ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS'] !== 'true'; +console.log(`process.env.ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS: ${process.env.ROSLYN_SKIP_TEST_FILE_BASED_PROGRAMS}`); +export const describeIfFileBasedPrograms = describeIf(runFileBasedProgramsTests); + function describeIf(condition: boolean) { return condition ? describe : describe.skip; } @@ -299,3 +325,8 @@ function isWindows() { function isLinux() { return !(isMacOS() || isWindows()); } + +export async function waitForAllAsyncOperationsAsync(exports: CSharpExtensionExports): Promise { + const source = new vscode.CancellationTokenSource(); + await exports.experimental.sendServerRequest(WaitForAsyncOperationsRequest.type, { operations: [] }, source.token); +} diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/Directory.Build.props b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/Directory.Build.props new file mode 100644 index 0000000000..028c8dee38 --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/Directory.Build.props @@ -0,0 +1,6 @@ + + + + $(MSBuildThisFileDirectory) + + \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/app1.cs b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/app1.cs new file mode 100644 index 0000000000..0655ddff83 --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/src/scripts/app1.cs @@ -0,0 +1,4 @@ + + + +Console.WriteLine("Hello World!"); diff --git a/test/lsptoolshost/integrationTests/testHooks.ts b/test/lsptoolshost/integrationTests/testHooks.ts new file mode 100644 index 0000000000..3fd6936114 --- /dev/null +++ b/test/lsptoolshost/integrationTests/testHooks.ts @@ -0,0 +1,21 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as lsp from 'vscode-languageserver-protocol'; + +export interface WaitForAsyncOperationsParams { + /** + * The operations to wait for. + */ + operations: string[]; +} + +export interface WaitForAsyncOperationsResponse {} // eslint-disable-line @typescript-eslint/no-empty-object-type + +export namespace WaitForAsyncOperationsRequest { + export const method = 'workspace/waitForAsyncOperations'; + export const messageDirection: lsp.MessageDirection = lsp.MessageDirection.clientToServer; + export const type = new lsp.RequestType(method); +} From da6098b1c9654437c57c517352b905e084363d06 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Tue, 4 Nov 2025 23:03:08 +0000 Subject: [PATCH 102/105] Localization result of cc8b154b75b39c30a73e2053e31561dd63b6d4eb. --- 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 e72714a742..f416eb7a93 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Zobrazit tipy pro indexery", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Zobrazit nápovědy pro typy parametrů lambda", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Zobrazovat vložené nápovědy k typům", - "configuration.dotnet.autoInsert.enableAutoInsert": "Povolí automatické vkládání komentářů k dokumentaci.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Spustit analýzu kódu na pozadí pro: (Dříve omnisharp.enableRoslynAnalyzers)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Celé řešení", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Žádné", diff --git a/package.nls.de.json b/package.nls.de.json index e50cdc6477..32c1d75ee3 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Hinweise für Indexer anzeigen", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Hinweise für Lambda-Parametertypen anzeigen", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Inlinetyphinweise anzeigen", - "configuration.dotnet.autoInsert.enableAutoInsert": "Aktivieren Sie das automatische Einfügen von Dokumentationskommentaren.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Ausführen der Hintergrundcodeanalyse für: (Zuvor \"omnisharp.enableRoslynAnalyzers\")", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Gesamte Projektmappe", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Keine", diff --git a/package.nls.es.json b/package.nls.es.json index 4aa159049c..eef95e112f 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Mostrar sugerencias para indizadores", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Mostrar sugerencias para los tipos de parámetros lambda", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Mostrar sugerencias de tipo insertado", - "configuration.dotnet.autoInsert.enableAutoInsert": "Habilite la inserción automática de comentarios de documentación.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Ejecutar análisis de código en segundo plano para: (anteriormente \"omnisharp.enableRoslynAnalyzers\")", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Toda la solución", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Ninguno", diff --git a/package.nls.fr.json b/package.nls.fr.json index d9f8a18e40..2aba534360 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Afficher les indicateurs pour les indexeurs", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Afficher les indicateurs pour les types de paramètre lambda", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Afficher les indicateurs de type inline", - "configuration.dotnet.autoInsert.enableAutoInsert": "Activez l’insertion automatique des commentaires de documentation.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Exécuter l’analyse du code en arrière-plan pour : (précédemment, « omnisharp.enableRoslynAnalyzers »)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Solution complète", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Aucun", diff --git a/package.nls.it.json b/package.nls.it.json index 328f36d6e6..3f5dbfc741 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Mostra suggerimenti per i valori letterali", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Mostra suggerimenti per i tipi di parametro lambda", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Visualizza suggerimenti di tipo inline", - "configuration.dotnet.autoInsert.enableAutoInsert": "Abilita l'inserimento automatico dei commenti della documentazione.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Eseguire l'analisi del codice in background per: (In precedenza “omnisharp.enableRoslynAnalyzers”)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Intera soluzione", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Nessuno", diff --git a/package.nls.ja.json b/package.nls.ja.json index 661b43dd1a..c006085552 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "インデクサーのヒントを表示する", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "ラムダ パラメーター型のヒントを表示する", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "インライン型のヒントを表示する", - "configuration.dotnet.autoInsert.enableAutoInsert": "ドキュメント コメントの自動挿入を有効にします。", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "次のバックグラウンド コード分析を実行します: (以前の `omnisharp.enableRoslynAnalyzers`)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "ソリューション全体", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "なし", diff --git a/package.nls.ko.json b/package.nls.ko.json index fd74ce02cc..b8b06f2d5c 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "인덱서에 대한 힌트 표시", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "람다 매개 변수 형식에 대한 힌트 표시", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "인라인 유형 힌트 표시", - "configuration.dotnet.autoInsert.enableAutoInsert": "문서 주석 자동 삽입을 사용하도록 설정합니다.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "다음에 대한 백그라운드 코드 분석 실행: (이전의 `omnisharp.enableRoslynAnalyzers`)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "전체 솔루션", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "없음", diff --git a/package.nls.pl.json b/package.nls.pl.json index bdb6666e81..72cc1844aa 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Pokaż wskazówki dla indeksatorów", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Pokaż wskazówki dla typów parametrów funkcji lambda", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Wyświetl wskazówki w tekście dla typów", - "configuration.dotnet.autoInsert.enableAutoInsert": "Włącz automatyczne wstawianie komentarzy do dokumentacji.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Uruchom analizę kodu w tle dla: (Wcześniej „omnisharp.enableRoslynAnalyzers”)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Całe rozwiązanie", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Brak", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 4eb622bbed..37cfec3dbc 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Mostrar dicas para indexadores", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Mostrar as dicas para os tipos de parâmetro lambda", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Exibir as dicas embutidas de tipo", - "configuration.dotnet.autoInsert.enableAutoInsert": "Habilitar a inserção automática de comentários de documentação.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Execute a análise de código em segundo plano para: (Anteriormente `omnisharp.enableRoslynAnalyzers`)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Solução inteira", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Nenhum", diff --git a/package.nls.ru.json b/package.nls.ru.json index 1a7018c80a..1283b6ba5a 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Отображать подсказки для индексаторов", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Отображать подсказки для типов лямбда-параметров", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Отображать подсказки для встроенных типов", - "configuration.dotnet.autoInsert.enableAutoInsert": "Включить автоматическую вставку комментариев к документации.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Выполнить анализ кода в фоновом режиме для: (ранее — \"omnisharp.enableRoslynAnalyzers\")", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Все решение", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Нет", diff --git a/package.nls.tr.json b/package.nls.tr.json index 99ac9f5a44..9ca6442b7e 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "Dizin oluşturucular için ipuçlarını göster", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "Lambda parametre türleri için ipuçlarını göster", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "Satır içi tür ipuçlarını göster", - "configuration.dotnet.autoInsert.enableAutoInsert": "Belge açıklamalarının otomatik olarak eklenmesini etkinleştirin.", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "Şunun için arka plan kodu analizini çalıştırın: (Daha önce `omnisharp.enableRoslynAnalyzers`)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "Tüm çözüm", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "Yok", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 419f5ac4d1..41e2de7b5f 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "显示索引器的提示", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "显示 lambda 参数类型的提示", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "显示内联类型提示", - "configuration.dotnet.autoInsert.enableAutoInsert": "启用文档注释的自动插入。", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "运行以下项的后台代码分析: (之前为 \"omnisharp.enableRoslynAnalyzers\")", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "整个解决方案", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "无", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 6890d5296a..c1e7c55488 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -29,7 +29,7 @@ "configuration.csharp.inlayHints.enableInlayHintsForIndexerParameters": "顯示索引子的提示", "configuration.csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": "顯示 Lambda 參數類型的提示", "configuration.csharp.inlayHints.enableInlayHintsForTypes": "顯示內嵌類型提示", - "configuration.dotnet.autoInsert.enableAutoInsert": "啟用自動插入檔批注。", + "configuration.dotnet.autoInsert.enableAutoInsert": "Enable automatic adjustments of code constructs on typing, including documentation comment insertion, brace formatting adjustments, and raw string literal support.", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope": "執行背景程式碼分析: (先前為 `omnisharp.enableRoslynAnalyzers`)", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.fullSolution": "整個解決方案", "configuration.dotnet.backgroundAnalysis.analyzerDiagnosticsScope.none": "無", From 82366a52115f4df06098689e506d0414ebae9a9f Mon Sep 17 00:00:00 2001 From: JoeRobich Date: Wed, 5 Nov 2025 05:01:38 +0000 Subject: [PATCH 103/105] Update main CHANGELOG --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564113950d..ea95dc7989 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # 2.97.x +* Add integration test for restore of file-based programs (PR: [#8470](https://github.com/dotnet/vscode-csharp/pull/8470)) +* Update setting documentation for on auto insert (PR: [#8742](https://github.com/dotnet/vscode-csharp/pull/8742)) +* Bump xamlTools to fix "Color" auto-completion and code navigation (PR: [#8740](https://github.com/dotnet/vscode-csharp/pull/8740)) +* Update VM image to macOS-15 in pipeline (PR: [#8741](https://github.com/dotnet/vscode-csharp/pull/8741)) +* Revert "Update Debugger to v2.95.0" (PR: [#8736](https://github.com/dotnet/vscode-csharp/pull/8736)) +* Add instructions for creating private feedback (PR: [#8732](https://github.com/dotnet/vscode-csharp/pull/8732)) +* Implement tiered versioning scheme for branch snapping workflow (PR: [#8728](https://github.com/dotnet/vscode-csharp/pull/8728)) +* Update Roslyn to 5.3.0-1.25524.13 (PR: [#8723](https://github.com/dotnet/vscode-csharp/pull/8723)) +* Bump Razor to 10.0.0-preview.25524.10 (PR: [#8721](https://github.com/dotnet/vscode-csharp/pull/8721)) * Bump xamlTools to 18.3.11128.18 (PR: [#8669](https://github.com/dotnet/vscode-csharp/pull/8740)) * Update target framework in Razor integration test (PR: [#8729](https://github.com/dotnet/vscode-csharp/pull/8729)) * Use global.json with rollforward instead of pipeline versions (PR: [#8722](https://github.com/dotnet/vscode-csharp/pull/8722)) From 0f7243fe2537b375eb919ef21e616035a7c868cf Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 5 Nov 2025 09:31:31 -0800 Subject: [PATCH 104/105] Update CHANGELOG.md --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea95dc7989..95cf7d2a28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,10 @@ # 2.97.x * Add integration test for restore of file-based programs (PR: [#8470](https://github.com/dotnet/vscode-csharp/pull/8470)) * Update setting documentation for on auto insert (PR: [#8742](https://github.com/dotnet/vscode-csharp/pull/8742)) -* Bump xamlTools to fix "Color" auto-completion and code navigation (PR: [#8740](https://github.com/dotnet/vscode-csharp/pull/8740)) +* Bump xamlTools to fix "Color" auto-completion and code navigation (PR: [#8740](https://github.com/dotnet/vscode-csharp/pull/8740)) * Update VM image to macOS-15 in pipeline (PR: [#8741](https://github.com/dotnet/vscode-csharp/pull/8741)) -* Revert "Update Debugger to v2.95.0" (PR: [#8736](https://github.com/dotnet/vscode-csharp/pull/8736)) * Add instructions for creating private feedback (PR: [#8732](https://github.com/dotnet/vscode-csharp/pull/8732)) * Implement tiered versioning scheme for branch snapping workflow (PR: [#8728](https://github.com/dotnet/vscode-csharp/pull/8728)) -* Update Roslyn to 5.3.0-1.25524.13 (PR: [#8723](https://github.com/dotnet/vscode-csharp/pull/8723)) -* Bump Razor to 10.0.0-preview.25524.10 (PR: [#8721](https://github.com/dotnet/vscode-csharp/pull/8721)) * Bump xamlTools to 18.3.11128.18 (PR: [#8669](https://github.com/dotnet/vscode-csharp/pull/8740)) * Update target framework in Razor integration test (PR: [#8729](https://github.com/dotnet/vscode-csharp/pull/8729)) * Use global.json with rollforward instead of pipeline versions (PR: [#8722](https://github.com/dotnet/vscode-csharp/pull/8722)) From b1e174ed0d4ac180ae2f4c9a916efd35e7d45520 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Wed, 12 Nov 2025 11:54:18 -0800 Subject: [PATCH 105/105] fix fbp tests --- .../slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace | 1 + .../slnWithCsproj/.vscode/slnWithCsproj.code-workspace | 1 + 2 files changed, 2 insertions(+) diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace index e045c46705..7b5596c70f 100644 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace @@ -8,5 +8,6 @@ "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", "dotnet.server.useOmnisharp": false, "dotnet.preferCSharpExtension": false, + "dotnet.projects.enableFileBasedPrograms": true } } \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace index 06c4a6bea6..c978a74c12 100644 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace @@ -8,5 +8,6 @@ "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", "dotnet.server.useOmnisharp": false, "dotnet.preferCSharpExtension": true, + "dotnet.projects.enableFileBasedPrograms": true } } \ No newline at end of file