diff --git a/.gitattributes b/.gitattributes index 8d7c826eab3..890d9b89325 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,3 +4,6 @@ .xrefmap.json filter=lfs diff=lfs merge=lfs -text # Use LF for templates files. templates/** eol=lf + +# VerifyTests +*.verified.txt text eol=lf working-tree-encoding=UTF-8 \ No newline at end of file diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml index 3c75491662b..8a00b36d314 100644 --- a/.github/actions/build/action.yml +++ b/.github/actions/build/action.yml @@ -20,5 +20,5 @@ runs: shell: bash working-directory: templates - - run: dotnet build -c Release --warnAsError + - run: dotnet build -c Release --warnAsError --maxcpucount shell: bash diff --git a/.github/codeql-config.yml b/.github/codeql-config.yml deleted file mode 100644 index 53455a1497c..00000000000 --- a/.github/codeql-config.yml +++ /dev/null @@ -1,2 +0,0 @@ -paths-ignore: - - '**/docfx.vendor.js' \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4e95be6db51..b72403360d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,9 +31,9 @@ jobs: shell: bash working-directory: templates - - run: dotnet test -c Release -f net8.0 --no-build --collect:"XPlat Code Coverage" + - run: dotnet test -c Release -f net8.0 --no-build --collect:"XPlat Code Coverage" --consoleLoggerParameters:"Summary;Verbosity=Minimal" - - run: dotnet test -c Release -f net6.0 --no-build --collect:"XPlat Code Coverage" + - run: dotnet test -c Release -f net6.0 --no-build --collect:"XPlat Code Coverage" --consoleLoggerParameters:"Summary;Verbosity=Minimal" if: matrix.os == 'ubuntu-latest' - run: npm i -g @percy/cli @@ -44,9 +44,6 @@ jobs: env: PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} - - uses: codecov/codecov-action@v4 - if: matrix.os == 'ubuntu-latest' - - run: echo "DOTNET_DbgEnableMiniDump=1" >> $GITHUB_ENV if: matrix.os == 'ubuntu-latest' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 56cc1fd9223..00000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: codeql -on: - push: - branches: [ main ] - schedule: - - cron: '0 0 * * 0' -jobs: - codeql: - runs-on: ubuntu-latest - permissions: - security-events: write - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 20 - - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 8.x - - - uses: github/codeql-action/init@v3 - with: - languages: ['csharp', 'javascript'] - - - run: | - npm install - npm run build - working-directory: templates - - - run: dotnet build -c Release - - - uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c2ecef6e023..82f921c982c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,9 +16,9 @@ jobs: - name: dotnet publish run: | - dotnet publish src/docfx -f net8.0 -c Release /p:Version=${GITHUB_REF_NAME#v} --self-contained -r win-x64 -o drop/publish/win-x64 /p:PlaywrightPlatform=win - dotnet publish src/docfx -f net8.0 -c Release /p:Version=${GITHUB_REF_NAME#v} --self-contained -r linux-x64 -o drop/publish/linux-x64 /p:PlaywrightPlatform=linux - dotnet publish src/docfx -f net8.0 -c Release /p:Version=${GITHUB_REF_NAME#v} --self-contained -r osx-x64 -o drop/publish/osx-x64 /p:PlaywrightPlatform=osx + dotnet publish src/docfx -f net8.0 -c Release /p:Version=${GITHUB_REF_NAME#v} --self-contained -r win-x64 -o drop/publish/win-x64 + dotnet publish src/docfx -f net8.0 -c Release /p:Version=${GITHUB_REF_NAME#v} --self-contained -r linux-x64 -o drop/publish/linux-x64 + dotnet publish src/docfx -f net8.0 -c Release /p:Version=${GITHUB_REF_NAME#v} --self-contained -r osx-x64 -o drop/publish/osx-x64 mkdir -p drop/bin - run: zip -r ../../bin/docfx-win-x64-${GITHUB_REF_NAME}.zip . diff --git a/Directory.Build.props b/Directory.Build.props index cddf0d2c372..46f3e4a1dc1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -59,4 +59,12 @@ + + + + + + + + diff --git a/Directory.Packages.props b/Directory.Packages.props index 9ac3f75fa10..b447aaafc7e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,65 +1,65 @@ - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Dockerfile b/Dockerfile index 9e9bf3e627a..d46998ee16a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,18 +3,31 @@ FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim # Add dotnet tools to path. ENV PATH="${PATH}:/root/.dotnet/tools" +# Set target docfx version. +ARG DOCFX_VERSION=2.77.0 + # Install DocFX as a dotnet tool. -RUN dotnet tool update -g docfx && \ - docfx --version +RUN dotnet tool install docfx -g --version ${DOCFX_VERSION} && \ + docfx --version && \ + rm -f /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/docfx.nupkg && \ + rm -f /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/docfx.${DOCFX_VERSION}.nupkg && \ + rm -rf /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/tools/net6.0 -# Install dependences for chromium PDF. +# Install Node.js and dependences for chromium PDF. RUN apt-get update -qq && \ apt-get install -y -qq --no-install-recommends \ + nodejs \ libglib2.0-0 libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \ libdbus-1-3 libxcb1 libxkbcommon0 libatspi2.0-0 libx11-6 libxcomposite1 libxdamage1 \ libxext6 libxfixes3 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 && \ rm -rf /var/lib/apt/lists/* /tmp/* +# Install Chromium. +RUN PLAYWRIGHT_NODEJS_PATH="/usr/bin/node" && \ + ln -s /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/tools/.playwright /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/tools/net8.0/any/.playwright && \ + pwsh -File /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/tools/net8.0/any/playwright.ps1 install chromium && \ + unlink /root/.dotnet/tools/.store/docfx/${DOCFX_VERSION}/docfx/${DOCFX_VERSION}/tools/net8.0/any/.playwright + WORKDIR /opt/prj VOLUME [ "/opt/prj" ] diff --git a/docs/docs/pdf.md b/docs/docs/pdf.md index 75ad0f5339f..52934054753 100644 --- a/docs/docs/pdf.md +++ b/docs/docs/pdf.md @@ -85,7 +85,7 @@ Indicates whether to include background graphics when rendering the pdf. ### `pdfHeaderTemplate` -HTML template for the print header. Should be valid HTML markup with following HTML elements used to inject printing values into them: +HTML template for the print header, or a path to an HTML page relative to the root of the output directory. Should be valid HTML markup with following HTML elements used to inject printing values into them: - ``: current page number. - ``: total pages in the document. @@ -95,7 +95,7 @@ HTML template for the print header. Should be valid HTML markup with following H ### `pdfFooterTemplate` -HTML template for the print footer. Should use the same format as the [header template](#pdfheadertemplate). Uses the following default footer template if unspecified: +HTML template for the print footer, or a path to an HTML page relative to the root of the output directory. Should use the same format as the [header template](#pdfheadertemplate). Uses the following default footer template if unspecified: ```html
diff --git a/docs/reference/docfx-cli-reference/docfx-metadata.md b/docs/reference/docfx-cli-reference/docfx-metadata.md index 5afe3b03ec4..fc679ed5142 100644 --- a/docs/reference/docfx-cli-reference/docfx-metadata.md +++ b/docs/reference/docfx-cli-reference/docfx-metadata.md @@ -95,6 +95,15 @@ Run `docfx metadata --help` or `docfx -h` to get a list of all available options - `SeparatePages` - Place members in separate pages. +- **--useClrTypeNames** + + Indicates whether the CLR type names or the language aliases must be used. + + - not specified or `false` + - The language aliases are used: `int`. + - `true` + - The CLR type names are used: `Int32`. + ## Examples - Generate YAML files with default config. @@ -102,4 +111,3 @@ Run `docfx metadata --help` or `docfx -h` to get a list of all available options ```pwsh docfx metadata ``` - diff --git a/docs/reference/docfx-environment-variables-reference.md b/docs/reference/docfx-environment-variables-reference.md index e48301347d1..ad8ed1945bc 100644 --- a/docs/reference/docfx-environment-variables-reference.md +++ b/docs/reference/docfx-environment-variables-reference.md @@ -26,4 +26,9 @@ This setting is intended to be used on offline environment. ## `DOCFX_PDF_TIMEOUT` -Maximum time in milliseconds to override the default [Playwright timeout](https://playwright.dev/docs/api/class-browsercontext#browser-context-set-default-timeout) for PDF generation. \ No newline at end of file +Maximum time in milliseconds to override the default [Playwright timeout](https://playwright.dev/docs/api/class-browsercontext#browser-context-set-default-timeout) for PDF generation. + +## `PLAYWRIGHT_NODEJS_PATH` + +Custom Node.js executable path that will be used by the `docfx pdf' command. +By default, docfx automatically detect installed Node.js from `PATH`. diff --git a/docs/tutorial/howto_add_a_customized_post_processor.md b/docs/tutorial/howto_add_a_customized_post_processor.md index 368af20f986..ce00cc5f77e 100644 --- a/docs/tutorial/howto_add_a_customized_post_processor.md +++ b/docs/tutorial/howto_add_a_customized_post_processor.md @@ -9,8 +9,7 @@ In this topic, we will show how to add a customized post-processor. * Create a new C# class library project in `Visual Studio`. * Add nuget packages: - * [`System.Collections.Immutable`](https://www.nuget.org/packages/System.Collections.Immutable/1.3.1) with version 1.3.1 - * [`Microsoft.Composition`](https://www.nuget.org/packages/Microsoft.Composition/1.0.31) with version 1.0.31 + * [`System.Composition`](https://www.nuget.org/packages/System.Composition/8.0.0) with version 8.0.0 * Add `Docfx.Plugins` If you are building DocFX from source code, add this reference to the project, otherwise add the nuget package `Docfx.Plugins` with the same version as DocFX. @@ -58,8 +57,8 @@ Using `ExtractSearchIndex` for example again, we traverse all HTML files, extrac ## Step4: Build your project and copy the output dll files to: -* Global: the folder with name `Plugins` under the folder containing the Docfx executable -* Non-global: the folder with name `Plugins` under a template folder, then run `DocFX build` command with parameter `-t {template}`. +* Global: the folder that contains the Docfx executable. +* Non-global: the folder with name `plugins` under a template folder, then run `DocFX build` command with parameter `-t {template}`. *Hint*: DocFX can merge templates, so we can specify multiple template folders as `DocFX build -t {templateForRender},{templateForPlugins}`. Each of the template folders should have a subfolder named `Plugins` with exported assemblies. diff --git a/schemas/docfx.schema.json b/schemas/docfx.schema.json index f06d712e042..5979ceb1764 100644 --- a/schemas/docfx.schema.json +++ b/schemas/docfx.schema.json @@ -399,6 +399,7 @@ "sitemap": { "type": "object", "description": "Specifies the options for the sitemap.xml file.", + "additionalProperties": false, "properties": { "baseUrl": { "type": "string", @@ -465,6 +466,7 @@ "markdownEngineProperties": { "description": "Set the parameters for markdown engine, value should be a JSON string.", "type": "object", + "additionalProperties": false, "properties": { "enableSourceInfo": { "type": "boolean", @@ -520,6 +522,7 @@ "plantUmlOptions": { "type": "object", "description": "PlantUml extension configuration parameters", + "additionalProperties": false, "properties": { "javaPath": { "type": "string", @@ -572,6 +575,7 @@ "type": "array", "items": { "type": "object", + "additionalProperties": false, "properties": { "src": { "$ref": "#/$defs/srcFileMapping" @@ -688,6 +692,11 @@ "type": "boolean", "default": false, "description": "When enabled, continues documentation generation in case of compilation errors." + }, + "useClrTypeNames": { + "type": "boolean", + "default": false, + "description": "When enabled, use CLR type names instead of language aliases." } } } @@ -742,6 +751,7 @@ "type": "array", "items": { "type": "object", + "additionalProperties": false, "properties": { "content": { "$ref": "#/$defs/contentFileMapping" diff --git a/schemas/filterconfig.schema.json b/schemas/filterconfig.schema.json index 10e362ffdc1..271942dddf0 100644 --- a/schemas/filterconfig.schema.json +++ b/schemas/filterconfig.schema.json @@ -27,28 +27,30 @@ "properties": { "include": { "type": "object", + "additionalProperties": false, "properties": { "uidRegex": { "type": "string" }, - "kind": { + "type": { "$ref": "#/$defs/extendedSymbolKind" }, - "attribute": { + "hasAttribute": { "$ref": "#/$defs/attributeFilterInfo" } } }, "exclude": { "type": "object", + "additionalProperties": false, "properties": { "uidRegex": { "type": "string" }, - "kind": { + "type": { "$ref": "#/$defs/extendedSymbolKind" }, - "attribute": { + "hasAttribute": { "$ref": "#/$defs/attributeFilterInfo" } } @@ -57,19 +59,19 @@ }, "extendedSymbolKind": { "enum": [ - "assembly", - "namespace", - "class", - "struct", - "enum", - "interface", - "delegate", - "type", - "event", - "field", - "method", - "property", - "member" + "Assembly", + "Namespace", + "Class", + "Struct", + "Enum", + "Interface", + "Delegate", + "Type", + "Event", + "Field", + "Method", + "Property", + "Member" ] }, "attributeFilterInfo": { diff --git a/src/Docfx.App/Config/BuildJsonConfig.cs b/src/Docfx.App/Config/BuildJsonConfig.cs index 6aad661c579..c9dd2a4003a 100644 --- a/src/Docfx.App/Config/BuildJsonConfig.cs +++ b/src/Docfx.App/Config/BuildJsonConfig.cs @@ -72,7 +72,7 @@ internal class BuildJsonConfig /// [JsonProperty("globalMetadataFiles")] [JsonPropertyName("globalMetadataFiles")] - public ListWithStringFallback GlobalMetadataFiles { get; set; } = new ListWithStringFallback(); + public ListWithStringFallback GlobalMetadataFiles { get; set; } = new(); /// /// Metadata that applies to some specific files. @@ -90,7 +90,7 @@ internal class BuildJsonConfig /// [JsonProperty("fileMetadataFiles")] [JsonPropertyName("fileMetadataFiles")] - public ListWithStringFallback FileMetadataFiles { get; set; } = new ListWithStringFallback(); + public ListWithStringFallback FileMetadataFiles { get; set; } = []; /// /// The templates applied to each file in the documentation. It can be a string or an array. @@ -99,7 +99,7 @@ internal class BuildJsonConfig /// [JsonProperty("template")] [JsonPropertyName("template")] - public ListWithStringFallback Template { get; set; } = new ListWithStringFallback(); + public ListWithStringFallback Template { get; set; } = new(); /// /// The themes applied to the documentation. @@ -123,7 +123,7 @@ internal class BuildJsonConfig /// [JsonProperty("postProcessors")] [JsonPropertyName("postProcessors")] - public ListWithStringFallback PostProcessors { get; set; } = new ListWithStringFallback(); + public ListWithStringFallback PostProcessors { get; set; } = new(); /// /// Run in debug mode. With debug mode, raw model and view model will be exported diff --git a/src/Docfx.App/Config/GroupConfig.cs b/src/Docfx.App/Config/GroupConfig.cs index 9aeb337ff87..c6346938de3 100644 --- a/src/Docfx.App/Config/GroupConfig.cs +++ b/src/Docfx.App/Config/GroupConfig.cs @@ -23,5 +23,5 @@ internal class GroupConfig /// [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.App/Docfx.App.csproj b/src/Docfx.App/Docfx.App.csproj index 8a0ae58e539..609196c0de2 100644 --- a/src/Docfx.App/Docfx.App.csproj +++ b/src/Docfx.App/Docfx.App.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs b/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs index f7bc142b448..b7eb555a8ce 100644 --- a/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs +++ b/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs @@ -47,7 +47,10 @@ private static IEnumerable LoadPluginAssemblies(string pluginDirectory if (!Directory.Exists(pluginDirectory)) yield break; - Logger.LogInfo($"Searching custom plugins in directory {pluginDirectory}..."); + if (pluginDirectory == AppContext.BaseDirectory) + Logger.LogInfo($"Searching built-in plugins in directory {pluginDirectory}..."); + else + Logger.LogInfo($"Searching custom plugins in directory {pluginDirectory}..."); foreach (string assemblyFile in Directory.GetFiles(pluginDirectory, "*.dll", SearchOption.TopDirectoryOnly)) { diff --git a/src/Docfx.App/Helpers/PlaywrightHelper.cs b/src/Docfx.App/Helpers/PlaywrightHelper.cs new file mode 100644 index 00000000000..57e08f25112 --- /dev/null +++ b/src/Docfx.App/Helpers/PlaywrightHelper.cs @@ -0,0 +1,80 @@ +ï»ż// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Runtime.InteropServices; +using Docfx.Common; +using Docfx.Exceptions; + +#nullable enable + +namespace Docfx; + +internal static class PlaywrightHelper +{ + public static void EnsurePlaywrightNodeJsPath() + { + // Skip if playwright environment variable exists. + if (Environment.GetEnvironmentVariable("PLAYWRIGHT_DRIVER_SEARCH_PATH") != null) + return; + + if (Environment.GetEnvironmentVariable("PLAYWRIGHT_NODEJS_PATH") != null) + return; + + if (!TryFindNodeExecutable(out var exePath, out var nodeVersion)) + { + throw new DocfxException("Node.js executable is not found. Try to install Node.js or set the `PLAYWRIGHT_NODEJS_PATH` environment variable."); + } + + Logger.LogInfo($"Using Node.js {nodeVersion} executable."); + Logger.LogVerbose($"Path: {exePath}"); + + Environment.SetEnvironmentVariable("PLAYWRIGHT_NODEJS_PATH", exePath, EnvironmentVariableTarget.Process); + } + + private static bool TryFindNodeExecutable(out string exePath, out string nodeVersion) + { + // Find Node.js executable installation path from PATHs. + string exeName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "node.exe" : "node"; + + var pathEnv = Environment.GetEnvironmentVariable("PATH"); + if (pathEnv == null) + throw new DocfxException("Failed to get `PATH` environment variable."); + + var paths = pathEnv.Split(Path.PathSeparator); + foreach (var path in paths) + { + string fullPath = Path.GetFullPath(Path.Combine(path, exeName)); + + if (File.Exists(fullPath)) + { + exePath = fullPath; + nodeVersion = GetNodeVersion(exePath); + return true; + } + } + + exePath = ""; + nodeVersion = ""; + return false; + } + + /// + /// Returns `node --version` command result + /// + private static string GetNodeVersion(string exePath) + { + using var memoryStream = new MemoryStream(); + using var stdoutWriter = new StreamWriter(memoryStream); + + var exitCode = CommandUtility.RunCommand(new CommandInfo { Name = exePath, Arguments = "--version" }, stdoutWriter); + + if (exitCode != 0) + return ""; + + stdoutWriter.Flush(); + memoryStream.Position = 0; + + using var streamReader = new StreamReader(memoryStream); + return streamReader.ReadLine() ?? ""; + } +} diff --git a/src/Docfx.App/PdfBuilder.cs b/src/Docfx.App/PdfBuilder.cs index 25b7e225467..d2b84c90093 100644 --- a/src/Docfx.App/PdfBuilder.cs +++ b/src/Docfx.App/PdfBuilder.cs @@ -18,6 +18,7 @@ using UglyToad.PdfPig; using UglyToad.PdfPig.Actions; +using UglyToad.PdfPig.Content; using UglyToad.PdfPig.Graphics.Operations.SpecialGraphicsState; using UglyToad.PdfPig.Outline; using UglyToad.PdfPig.Outline.Destinations; @@ -47,6 +48,11 @@ class Outline public string? pdfFooterTemplate { get; init; } } + static PdfBuilder() + { + PlaywrightHelper.EnsurePlaywrightNodeJsPath(); + } + public static Task Run(BuildJsonConfig config, string configDirectory, string? outputDirectory = null) { var outputFolder = Path.GetFullPath(Path.Combine( @@ -137,7 +143,7 @@ await CreatePdf( IResult TocPage(string url) { - var pageNumbers = pdfPageNumbers.TryGetValue(url, out var x) ? x : default; + var pageNumbers = pdfPageNumbers.GetValueOrDefault(url); return Results.Content(TocHtmlTemplate(new Uri(baseUrl!, url), pdfTocs[url], pageNumbers).ToString(), "text/html", Encoding.UTF8); } @@ -179,10 +185,10 @@ IResult TocPage(string url) } } - Task PrintHeaderFooter(Outline toc, int pageNumber, int totalPages) + Task PrintHeaderFooter(Outline toc, int pageNumber, int totalPages, Page contentPage) { - var headerTemplate = ExpandTemplate(toc.pdfHeaderTemplate, pageNumber, totalPages); - var footerTemplate = ExpandTemplate(toc.pdfFooterTemplate ?? DefaultFooterTemplate, pageNumber, totalPages); + var headerTemplate = ExpandTemplate(GetHeaderFooter(toc.pdfHeaderTemplate), pageNumber, totalPages); + var footerTemplate = ExpandTemplate(GetHeaderFooter(toc.pdfFooterTemplate) ?? DefaultFooterTemplate, pageNumber, totalPages); return headerFooterCache.GetOrAdd((headerTemplate, footerTemplate), _ => PrintHeaderFooterCore()); @@ -195,12 +201,27 @@ async Task PrintHeaderFooterCore() { await page.GotoAsync("about:blank"); - return await page.PdfAsync(new() + PagePdfOptions options = new PagePdfOptions { DisplayHeaderFooter = true, HeaderTemplate = headerTemplate, FooterTemplate = footerTemplate, - }); + }; + + if (TryGetPlaywrightPageFormat(contentPage.Size, out var pageFormat)) + { + options.Format = pageFormat; + options.Landscape = contentPage.Width > contentPage.Height; + } + else + { + var customPageSize = GetPageSizeSettings(contentPage); + options.Width = customPageSize.Width; + options.Height = customPageSize.Height; + options.Landscape = customPageSize.Landscape; + } + + return await page.PdfAsync(options); } finally { @@ -217,11 +238,27 @@ static string ExpandTemplate(string? pdfTemplate, int pageNumber, int totalPages .Replace("", $"{totalPages}") .Replace("", $"{totalPages}"); } + + string? GetHeaderFooter(string? template) + { + if (string.IsNullOrEmpty(template)) + return template; + + try + { + var path = Path.Combine(outputFolder, template); + return File.Exists(path) ? File.ReadAllText(path) : template; + } + catch + { + return template; + } + } } } static async Task CreatePdf( - Func> printPdf, Func> printHeaderFooter, ProgressTask task, + Func> printPdf, Func> printHeaderFooter, ProgressTask task, Uri outlineUrl, Outline outline, string outputPath, Action> updatePageNumbers) { var tempDirectory = Path.Combine(Path.GetTempPath(), ".docfx", "pdf", "pages"); @@ -344,7 +381,7 @@ async Task MergePdf() if (isTocPage) continue; - var headerFooter = await printHeaderFooter(outline, pageNumber, numberOfPages); + var headerFooter = await printHeaderFooter(outline, pageNumber, numberOfPages, document.GetPage(i)); using var headerFooterDocument = PdfDocument.Open(headerFooter); pageBuilder.NewContentStreamBefore(); @@ -523,4 +560,62 @@ static HtmlTemplate TocHtmlTemplate(Uri baseUrl, Outline node, Dictionary
"""; + + /// + /// Gets playwright page format from PdfPig's PageSize. + /// + private static bool TryGetPlaywrightPageFormat(PageSize pageSize, out string? pageFormat) + { + // List of supported formats: https://playwright.dev/dotnet/docs/api/class-page#page-pdf + switch (pageSize) + { + case PageSize.Letter: + case PageSize.Legal: + case PageSize.Tabloid: + case PageSize.Ledger: + case PageSize.A0: + case PageSize.A1: + case PageSize.A2: + case PageSize.A3: + case PageSize.A4: + case PageSize.A5: + case PageSize.A6: + pageFormat = pageSize.ToString(); + return true; + + // Following format is not supported format by playwright. + // It need to use Width/Height settings. + case PageSize.A7: + case PageSize.A8: + case PageSize.A9: + case PageSize.A10: + case PageSize.Custom: + case PageSize.Executive: + default: + pageFormat = null; + return false; + } + } + + /// + /// Gets page size settings from PdfPig's Page object. + /// + private static (string Width, string Height, bool Landscape) GetPageSizeSettings(Page contentPage) + { + var isLandscape = contentPage.Width > contentPage.Height; + var width = getMillimeter(contentPage.Width); + var height = getMillimeter(contentPage.Height); + + return isLandscape + ? (height, width, true) // On Landscape mode. It need to swap width/height. + : (width, height, false); + + // Gets millimeter string representation from `pt` value. + static string getMillimeter(double pt) + { + const double MillimeterPerInch = 25.4d; + const double Dpi = 72d; // Use Default DPI of PDF. + return $"{Math.Round(pt * MillimeterPerInch / Dpi)}mm"; + } + } } diff --git a/src/Docfx.App/RunMerge.cs b/src/Docfx.App/RunMerge.cs index 795f3c159a1..76df5b5ed51 100644 --- a/src/Docfx.App/RunMerge.cs +++ b/src/Docfx.App/RunMerge.cs @@ -83,17 +83,6 @@ private static FileMetadata ConvertToFileMetadataItem(string baseDirectory, Dict return new FileMetadata(baseDirectory, result); } - private static IEnumerable GetFilesFromFileMapping(FileMapping mapping) - { - if (mapping == null) - { - return Enumerable.Empty(); - } - return from file in mapping.Items - from item in file.Files - select Path.Combine(file.Src ?? Directory.GetCurrentDirectory(), item); - } - private static FileCollection GetFileCollectionFromFileMapping(string baseDirectory, DocumentType type, FileMapping files) { var result = new FileCollection(baseDirectory); diff --git a/src/Docfx.App/RunServe.cs b/src/Docfx.App/RunServe.cs index 84e83355bc0..54cfb197ddc 100644 --- a/src/Docfx.App/RunServe.cs +++ b/src/Docfx.App/RunServe.cs @@ -41,7 +41,8 @@ public static void Exec(string folder, string host, int? port, bool openBrowser, builder.Logging.ClearProviders(); builder.WebHost.UseUrls(url); - Console.WriteLine($"Serving \"{folder}\" on {url}. Press Ctrl+C to shut down."); + Console.WriteLine($"Serving \"{folder}\" on {url}"); + Console.WriteLine("Press Ctrl+C to shut down"); using var app = builder.Build(); app.UseServe(folder); diff --git a/src/Docfx.Build.Common/MarkdownReader.cs b/src/Docfx.Build.Common/MarkdownReader.cs index 17a17e52409..1aae2b1eaf8 100644 --- a/src/Docfx.Build.Common/MarkdownReader.cs +++ b/src/Docfx.Build.Common/MarkdownReader.cs @@ -129,7 +129,7 @@ private static bool CheckRequiredProperties(ImmutableDictionary if (notExistsKeys.Count > 0) { message = - $"Required properties {{{{{string.Join(",", notExistsKeys)}}}}} are not set. Note that keys are case sensitive."; + $"Required properties {{{{{string.Join(',', notExistsKeys)}}}}} are not set. Note that keys are case sensitive."; return false; } diff --git a/src/Docfx.Build.Common/ModelAttributeHandlers/HandleModelAttributesContext.cs b/src/Docfx.Build.Common/ModelAttributeHandlers/HandleModelAttributesContext.cs index 519b1356f5b..10f37bc5c1c 100644 --- a/src/Docfx.Build.Common/ModelAttributeHandlers/HandleModelAttributesContext.cs +++ b/src/Docfx.Build.Common/ModelAttributeHandlers/HandleModelAttributesContext.cs @@ -14,11 +14,11 @@ public class HandleModelAttributesContext public bool EnableContentPlaceholder { get; set; } public string PlaceholderContent { get; set; } public bool ContainsPlaceholder { get; set; } - public HashSet Dependency { get; set; } = new HashSet(); + public HashSet Dependency { get; set; } = new(); public FileAndType FileAndType { get; set; } - public HashSet LinkToFiles { get; set; } = new HashSet(FilePathComparer.OSPlatformSensitiveStringComparer); - public HashSet LinkToUids { get; set; } = new HashSet(); - public List Uids { get; set; } = new List(); - public Dictionary> UidLinkSources { get; set; } = new Dictionary>(); - public Dictionary> FileLinkSources { get; set; } = new Dictionary>(); + public HashSet LinkToFiles { get; set; } = new(FilePathComparer.OSPlatformSensitiveStringComparer); + public HashSet LinkToUids { get; set; } = new(); + public List Uids { get; set; } = new(); + public Dictionary> UidLinkSources { get; set; } = new(); + public Dictionary> FileLinkSources { get; set; } = new(); } diff --git a/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/UrlContentHandler.cs b/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/UrlContentHandler.cs index 6bdf50acc54..369a59e41f3 100644 --- a/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/UrlContentHandler.cs +++ b/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/UrlContentHandler.cs @@ -93,7 +93,7 @@ private static string GetHrefFromRoot(string originalHref, HandleModelAttributes var file = path.GetPathFromWorkingFolder().UrlDecode(); if (context.Host.SourceFiles.ContainsKey(file)) { - result = file.UrlEncode().ToString() + UriUtility.GetQueryStringAndFragment(originalHref); + result = file.UrlEncode() + UriUtility.GetQueryStringAndFragment(originalHref); } if (!context.FileLinkSources.TryGetValue(file, out List sources)) diff --git a/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs b/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs index 93c157e0f9a..7d412822293 100644 --- a/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs +++ b/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs @@ -17,7 +17,7 @@ public class OverwriteDocumentModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); /// /// The uid for this overwrite document, as defined in YAML header @@ -49,7 +49,7 @@ public class OverwriteDocumentModel [YamlIgnore] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public HashSet LinkToFiles { get; set; } = new HashSet(); + public HashSet LinkToFiles { get; set; } = new(); /// /// Links to other Uids @@ -57,7 +57,7 @@ public class OverwriteDocumentModel [YamlIgnore] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public HashSet LinkToUids { get; set; } = new HashSet(); + public HashSet LinkToUids { get; set; } = new(); /// /// Link sources information for file @@ -65,7 +65,7 @@ public class OverwriteDocumentModel [YamlIgnore] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary> FileLinkSources { get; set; } = new Dictionary>(); + public Dictionary> FileLinkSources { get; set; } = new(); /// /// Link sources information for Uid @@ -73,7 +73,7 @@ public class OverwriteDocumentModel [YamlIgnore] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary> UidLinkSources { get; set; } = new Dictionary>(); + public Dictionary> UidLinkSources { get; set; } = new(); /// /// Dependencies extracted from the markdown content diff --git a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs index 35036bf3612..48a62fcfb5c 100644 --- a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs +++ b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs @@ -184,7 +184,7 @@ public class ApiBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); public static ApiBuildOutput FromModel(PageViewModel model) { diff --git a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutputUtility.cs b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutputUtility.cs index 1738d33cf2a..d1b81187811 100644 --- a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutputUtility.cs +++ b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutputUtility.cs @@ -82,7 +82,7 @@ public static List TransformToLanguagePairList(string defa var result = new List(); foreach (var language in supportedLanguages) { - var value = values.ContainsKey(language) ? values[language] : defaultValue; + var value = values.GetValueOrDefault(language, defaultValue); // TODO: Sometimes output contains undeterministic \n\n sequences value = value.Replace("\n\n", "\n"); diff --git a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs index 821f867bd1c..454bb7ea717 100644 --- a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs +++ b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs @@ -39,7 +39,7 @@ public class ApiReferenceBuildOutput [JsonProperty("definition")] [JsonPropertyName("definition")] public string Definition { get; set; } - + [YamlMember(Alias = "isExternal")] [JsonProperty("isExternal")] [JsonPropertyName("isExternal")] @@ -173,7 +173,7 @@ public class ApiReferenceBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); [EditorBrowsable(EditorBrowsableState.Never)] [YamlIgnore] diff --git a/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs b/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs index 68dfe47dd91..8910a97fa99 100644 --- a/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs +++ b/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs @@ -90,7 +90,7 @@ public override IEnumerable Prebuild(ImmutableList models, private static void RenewDupeFileModels(FileModel dupeModel, Dictionary newFilePaths, Dictionary modelsDict) { - var page = dupeModel.Content as PageViewModel; + var page = (PageViewModel)dupeModel.Content; var memberType = page.Items[0]?.Type; var newFileName = Path.GetFileNameWithoutExtension(dupeModel.File); @@ -634,11 +634,7 @@ public ModelWrapper(ItemViewModel item, FileModel fileModel) private static void AddModelToDict(FileModel model, Dictionary models, List dupeModels) { - if (!models.ContainsKey(model.File)) - { - models[model.File] = model; - } - else + if (!models.TryAdd(model.File, model)) { dupeModels.Add(model); } diff --git a/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs b/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs index e1878f6613f..5eb21b8a427 100644 --- a/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs +++ b/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs @@ -36,7 +36,7 @@ public override IEnumerable Prebuild(ImmutableList models, var duplicateKeys = tocRestructions.Where(t => treeItemRestructions.Any(i => i.Key == t.Key)).Select(i => i.Key); if (duplicateKeys.Any()) { - Logger.LogWarning($"Model with the key {string.Join(",", duplicateKeys)} already exists. '{model.OriginalFileAndType?.FullPath ?? model.FileAndType.FullPath}' is ignored."); + Logger.LogWarning($"Model with the key {string.Join(',', duplicateKeys)} already exists. '{model.OriginalFileAndType?.FullPath ?? model.FileAndType.FullPath}' is ignored."); } else { @@ -73,7 +73,7 @@ private static Tuple, List> SplitModelToOpe operationModel.Metadata["_isSplittedToOperation"] = true; var newModel = GenerateNewFileModel(model, operationModel); splittedModels.Add(newModel); - treeItems.Add(ConvertToTreeItem(operationModel, newModel.Key)); + treeItems.Add(ConvertToTreeItem(operationModel)); } // Reset children @@ -129,7 +129,7 @@ private static IEnumerable GenerateOperationModels(Res }; // Reset child's uid to "originalUid/operation", that is to say, overwrite of original Uid will show in operation page. - child.Uid = string.Join("/", child.Uid, "operation"); + child.Uid = string.Join('/', child.Uid, "operation"); // Reset html id, which is set by template child.HtmlId = null; @@ -167,7 +167,7 @@ private static FileModel GenerateNewFileModel(FileModel model, RestApiRootItemVi return newModel; } - private static TreeItem ConvertToTreeItem(RestApiRootItemViewModel root, string fileKey) + private static TreeItem ConvertToTreeItem(RestApiRootItemViewModel root) { return new TreeItem { diff --git a/src/Docfx.Build.OverwriteDocuments/OverwriteDocumentModelCreator.cs b/src/Docfx.Build.OverwriteDocuments/OverwriteDocumentModelCreator.cs index d310ced6149..5a9f3f2af30 100644 --- a/src/Docfx.Build.OverwriteDocuments/OverwriteDocumentModelCreator.cs +++ b/src/Docfx.Build.OverwriteDocuments/OverwriteDocumentModelCreator.cs @@ -77,7 +77,7 @@ internal Dictionary ConvertContents(Dictionary c private static void AppendNewObject(List OPathSegments, Block codeHeaderBlock, MarkdownDocument propertyValue, Dictionary contentsMetadata) { FindOrCreateObject(contentsMetadata, codeHeaderBlock, OPathSegments, 0, propertyValue, - string.Join("/", OPathSegments.Select(o => o.OriginalSegmentString))); + string.Join('/', OPathSegments.Select(o => o.OriginalSegmentString))); } private static void FindOrCreateObject(Dictionary currentObject, Block codeHeaderBlock, List OPathSegments, int index, MarkdownDocument propertyValue, string originalOPathString) @@ -138,7 +138,7 @@ where item is Dictionary dictionary { if (string.IsNullOrEmpty(segment.Key)) { - nextObject = CreateDictionaryObject(segment); + nextObject = CreateDictionaryObject(); currentObject[segment.SegmentName] = nextObject; } else @@ -200,7 +200,7 @@ private MarkdownDocument CreateDocument(MarkdownPropertyModel model) return result; } - private static Dictionary CreateDictionaryObject(OPathSegment segment) + private static Dictionary CreateDictionaryObject() { return new Dictionary(); } diff --git a/src/Docfx.Build.RestApi/Swagger/InfoObject.cs b/src/Docfx.Build.RestApi/Swagger/InfoObject.cs index 80e5911156c..f599720bf85 100644 --- a/src/Docfx.Build.RestApi/Swagger/InfoObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/InfoObject.cs @@ -32,5 +32,5 @@ public class InfoObject [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary PatternedObjects { get; set; } = new Dictionary(); + public Dictionary PatternedObjects { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerArray.cs b/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerArray.cs index 124f627105a..6219f6b225d 100644 --- a/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerArray.cs +++ b/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerArray.cs @@ -7,7 +7,7 @@ internal class SwaggerArray : SwaggerObjectBase { public override SwaggerObjectType ObjectType => SwaggerObjectType.Array; - public List Array { get; set; } = new List(); + public List Array { get; set; } = new(); public override SwaggerObjectBase Clone() { diff --git a/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerObject.cs b/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerObject.cs index 96915392163..397971ea2ce 100644 --- a/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerObject.cs @@ -7,7 +7,7 @@ internal class SwaggerObject : SwaggerObjectBase { public override SwaggerObjectType ObjectType => SwaggerObjectType.Object; - public Dictionary Dictionary { get; set; } = new Dictionary(); + public Dictionary Dictionary { get; set; } = new(); public override SwaggerObjectBase Clone() { diff --git a/src/Docfx.Build.RestApi/Swagger/OperationObject.cs b/src/Docfx.Build.RestApi/Swagger/OperationObject.cs index 4bf3e41ad0f..070d2bc56ca 100644 --- a/src/Docfx.Build.RestApi/Swagger/OperationObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/OperationObject.cs @@ -49,5 +49,5 @@ public class OperationObject [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/Swagger/ParameterObject.cs b/src/Docfx.Build.RestApi/Swagger/ParameterObject.cs index 2fa8c339fcd..b09e5759b01 100644 --- a/src/Docfx.Build.RestApi/Swagger/ParameterObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/ParameterObject.cs @@ -23,5 +23,5 @@ public class ParameterObject [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/Swagger/PathItemObject.cs b/src/Docfx.Build.RestApi/Swagger/PathItemObject.cs index cb01aa22dc9..6071499c396 100644 --- a/src/Docfx.Build.RestApi/Swagger/PathItemObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/PathItemObject.cs @@ -25,5 +25,5 @@ public class PathItemObject [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/Swagger/ResponseObject.cs b/src/Docfx.Build.RestApi/Swagger/ResponseObject.cs index b5406aeb3c2..fd098a1a225 100644 --- a/src/Docfx.Build.RestApi/Swagger/ResponseObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/ResponseObject.cs @@ -31,5 +31,5 @@ public class ResponseObject [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/Swagger/SwaggerModel.cs b/src/Docfx.Build.RestApi/Swagger/SwaggerModel.cs index 9b1494d9216..fa68585d5a8 100644 --- a/src/Docfx.Build.RestApi/Swagger/SwaggerModel.cs +++ b/src/Docfx.Build.RestApi/Swagger/SwaggerModel.cs @@ -95,5 +95,5 @@ public class SwaggerModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/Swagger/TagItemObject.cs b/src/Docfx.Build.RestApi/Swagger/TagItemObject.cs index f0f30dd6325..f632850f081 100644 --- a/src/Docfx.Build.RestApi/Swagger/TagItemObject.cs +++ b/src/Docfx.Build.RestApi/Swagger/TagItemObject.cs @@ -37,5 +37,5 @@ public class TagItemObject [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.RestApi/SwaggerModelConverter.cs b/src/Docfx.Build.RestApi/SwaggerModelConverter.cs index 5fb560f4852..f83a79c45bb 100644 --- a/src/Docfx.Build.RestApi/SwaggerModelConverter.cs +++ b/src/Docfx.Build.RestApi/SwaggerModelConverter.cs @@ -94,14 +94,7 @@ public static RestApiRootItemViewModel FromSwaggerModel(SwaggerModel swagger) }; // TODO: line number - if (swagger.Metadata.TryGetValue(Constants.PropertyName.Source, out object value)) - { - itemVm.Metadata[Constants.PropertyName.Source] = value; - } - else - { - itemVm.Metadata[Constants.PropertyName.Source] = null; - } + itemVm.Metadata[Constants.PropertyName.Source] = swagger.Metadata.GetValueOrDefault(Constants.PropertyName.Source); vm.Children.Add(itemVm); } } @@ -150,7 +143,7 @@ private static string GetUidForTag(string parentUid, TagItemObject tag) /// private static string GenerateUid(params string[] segments) { - return string.Join("/", segments.Where(s => !string.IsNullOrEmpty(s)).Select(s => s.Trim('/'))); + return string.Join('/', segments.Where(s => !string.IsNullOrEmpty(s)).Select(s => s.Trim('/'))); } /// diff --git a/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs b/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs index 96718e0667b..5b1284e1ea1 100644 --- a/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs +++ b/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs @@ -205,12 +205,7 @@ public static BaseSchema GetChildSchema(BaseSchema parent, string part) return parent.Items; } - if (parent.Properties.TryGetValue(part, out var bs)) - { - return bs; - } - - return null; + return parent.Properties.GetValueOrDefault(part); } private static string UnescapeReference(string reference) diff --git a/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs index a59cabc612a..497851514e7 100644 --- a/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs +++ b/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs @@ -29,13 +29,13 @@ public object Interpret(BaseSchema schema, object value, IProcessContext context if (value is MarkdownDocument val) { - return MarkupCore(val, context, path); + return MarkupCore(val, context); } return _inner.Interpret(schema, value, context, path); } - private static string MarkupCore(MarkdownDocument document, IProcessContext context, string path) + private static string MarkupCore(MarkdownDocument document, IProcessContext context) { var host = context.Host; diff --git a/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs index ceba2456501..a4c928497d7 100644 --- a/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs +++ b/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs @@ -36,8 +36,8 @@ private static string MarkupCore(string content, IProcessContext context, string (context.UidLinkSources).Merge(mr.UidLinkSources); (context.Dependency).UnionWith(mr.Dependency); - if (mr.Html.StartsWith(@""), " jsonPath=\"" + path + "\""); + if (mr.Html.StartsWith(""), " jsonPath=\"" + path + "\""); return mr.Html; } } diff --git a/src/Docfx.Build.SchemaDriven/SchemaFragmentsIterator.cs b/src/Docfx.Build.SchemaDriven/SchemaFragmentsIterator.cs index cd0dfd13eb9..805974f4b4b 100644 --- a/src/Docfx.Build.SchemaDriven/SchemaFragmentsIterator.cs +++ b/src/Docfx.Build.SchemaDriven/SchemaFragmentsIterator.cs @@ -59,9 +59,9 @@ private void TraverseCore( var propSchema = schema.Properties[key]; if (propSchema.Type == SchemaValueType.Object || propSchema.Type == SchemaValueType.Array) { - if (map.Children.ContainsKey(key)) + if (map.Children.TryGetValue(key, out YamlNode child)) { - TraverseCore(map.Children[key], fragments, propSchema, oPathPrefix + key, uid); + TraverseCore(child, fragments, propSchema, oPathPrefix + key, uid); } } else @@ -88,9 +88,9 @@ private void TraverseCore( { if (item is YamlMappingNode mapNode) { - if (mapNode.Children.ContainsKey(mergeKey)) + if (mapNode.Children.TryGetValue(mergeKey, out YamlNode child)) { - var opath = $"{parentOPath}[{mergeKey}=\"{mapNode.Children[mergeKey]}\"]"; + var opath = $"{parentOPath}[{mergeKey}=\"{child}\"]"; TraverseCore(item, fragments, schema.Items, opath, uid); } else diff --git a/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs b/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs index 75dca189e65..2a21076f632 100644 --- a/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs +++ b/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs @@ -14,9 +14,9 @@ public class ValidateFragmentsHandler : ISchemaFragmentsHandler public void HandleUid(string uidKey, YamlMappingNode node, Dictionary fragments, BaseSchema schema, string oPathPrefix, string uid) { - if (!fragments.ContainsKey(uid) && !_isMissingUidsLogged.ContainsKey(uid)) + if (!fragments.ContainsKey(uid)) { - _isMissingUidsLogged[uid] = false; + _isMissingUidsLogged.TryAdd(uid, false); } } diff --git a/src/Docfx.Build.SchemaDriven/Validators/SchemaValidator.cs b/src/Docfx.Build.SchemaDriven/Validators/SchemaValidator.cs index 39af31df8ca..834edbc8631 100644 --- a/src/Docfx.Build.SchemaDriven/Validators/SchemaValidator.cs +++ b/src/Docfx.Build.SchemaDriven/Validators/SchemaValidator.cs @@ -11,7 +11,7 @@ public class SchemaValidator { private readonly JsonSchema _schema; - private static readonly EvaluationOptions DefaultOptions = new EvaluationOptions + private static readonly EvaluationOptions DefaultOptions = new() { ValidateAgainstMetaSchema = false, OutputFormat = OutputFormat.List, diff --git a/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs b/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs index a064783fd5f..de7e7fc5852 100644 --- a/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs +++ b/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs @@ -77,7 +77,7 @@ private static Tuple, TreeItemRestructure> SplitModelToOperation tagModel.Metadata["_isSplittedToTag"] = true; var newModel = GenerateNewFileModel(model, tagModel); splittedModels.Add(newModel); - treeItems.Add(ConvertToTreeItem(tagModel, newModel.Key)); + treeItems.Add(ConvertToTreeItem(tagModel)); } // Only keep not tagged children in root model @@ -173,7 +173,7 @@ private static IEnumerable CalculateUids(RestApiRootItemViewModel root) } } - private static TreeItem ConvertToTreeItem(RestApiRootItemViewModel root, string fileKey) + private static TreeItem ConvertToTreeItem(RestApiRootItemViewModel root) { return new TreeItem { diff --git a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiBuildOutput.cs b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiBuildOutput.cs index d1129555bf9..f5284e1a38d 100644 --- a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiBuildOutput.cs +++ b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiBuildOutput.cs @@ -175,5 +175,5 @@ public class ApiBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiExceptionInfoBuildOutput.cs b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiExceptionInfoBuildOutput.cs index 1672ce2f5cb..d9963944c0f 100644 --- a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiExceptionInfoBuildOutput.cs +++ b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiExceptionInfoBuildOutput.cs @@ -24,5 +24,5 @@ public class ApiExceptionInfoBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiInheritanceTreeBuildOutput.cs b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiInheritanceTreeBuildOutput.cs index 5041fe36a70..17666ce6e3f 100644 --- a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiInheritanceTreeBuildOutput.cs +++ b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiInheritanceTreeBuildOutput.cs @@ -30,5 +30,5 @@ public class ApiInheritanceTreeBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiNames.cs b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiNames.cs index 043cfbf7304..687702098cc 100644 --- a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiNames.cs +++ b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiNames.cs @@ -45,5 +45,5 @@ public class ApiNames [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiParameterBuildOutput.cs b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiParameterBuildOutput.cs index a5e6ba7ffed..f9e9419457b 100644 --- a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiParameterBuildOutput.cs +++ b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiParameterBuildOutput.cs @@ -39,5 +39,5 @@ public class ApiParameterBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiSyntaxBuildOutput.cs b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiSyntaxBuildOutput.cs index e3e3d4ac55b..70490d78d8c 100644 --- a/src/Docfx.Build.UniversalReference/BuildOutputs/ApiSyntaxBuildOutput.cs +++ b/src/Docfx.Build.UniversalReference/BuildOutputs/ApiSyntaxBuildOutput.cs @@ -35,5 +35,5 @@ public class ApiSyntaxBuildOutput [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Build.UniversalReference/FillReferenceInformation.cs b/src/Docfx.Build.UniversalReference/FillReferenceInformation.cs index 6bc02b37982..3f0a238d371 100644 --- a/src/Docfx.Build.UniversalReference/FillReferenceInformation.cs +++ b/src/Docfx.Build.UniversalReference/FillReferenceInformation.cs @@ -28,14 +28,14 @@ public override void Postbuild(ImmutableList models, IHostService hos { continue; } - FillCore((PageViewModel)model.Content, host, model.OriginalFileAndType.File); + FillCore((PageViewModel)model.Content, host); } } } #region Private methods - private static void FillCore(PageViewModel model, IHostService host, string file) + private static void FillCore(PageViewModel model, IHostService host) { if (model.References == null || model.References.Count == 0) { diff --git a/src/Docfx.Build.UniversalReference/ModelConverter.cs b/src/Docfx.Build.UniversalReference/ModelConverter.cs index 44e18876d53..e0bbd94a4e8 100644 --- a/src/Docfx.Build.UniversalReference/ModelConverter.cs +++ b/src/Docfx.Build.UniversalReference/ModelConverter.cs @@ -100,12 +100,12 @@ List> ToSpec() var specs = src.Specs; foreach (var language in supportedLanguages) { - if (specs?.ContainsKey(language) == true) + if (specs?.TryGetValue(language, out List spec) is true) { result.Add(new ApiLanguageValuePair { Language = language, - Value = GetSpecName(specs[language]) + Value = GetSpecName(spec) }); } else @@ -394,7 +394,7 @@ public static List> ToApiListInDevLangs(T defaultValu result.Add(new ApiLanguageValuePair { Language = language, - Value = values.ContainsKey(language) ? values[language] : defaultValue, + Value = values.GetValueOrDefault(language, defaultValue), }); } diff --git a/src/Docfx.Build/ApiPage/ApiPageHtmlTemplate.cs b/src/Docfx.Build/ApiPage/ApiPageHtmlTemplate.cs index 6a46867a5de..ea1ab38d6d7 100644 --- a/src/Docfx.Build/ApiPage/ApiPageHtmlTemplate.cs +++ b/src/Docfx.Build/ApiPage/ApiPageHtmlTemplate.cs @@ -44,7 +44,7 @@ HtmlTemplate Api(Api api) var value = (ApiBase)api.Value; var attributes = value.metadata is null ? default - : UnsafeHtml(string.Join(" ", value.metadata.Select(m => $"data-{WebUtility.HtmlEncode(m.Key)}='{WebUtility.HtmlEncode(m.Value)}'"))); + : UnsafeHtml(string.Join(' ', value.metadata.Select(m => $"data-{WebUtility.HtmlEncode(m.Key)}='{WebUtility.HtmlEncode(m.Value)}'"))); var (level, title) = api.Value switch { diff --git a/src/Docfx.Build/CompilePhaseHandler.cs b/src/Docfx.Build/CompilePhaseHandler.cs index 1dc41221526..e6ad1537014 100644 --- a/src/Docfx.Build/CompilePhaseHandler.cs +++ b/src/Docfx.Build/CompilePhaseHandler.cs @@ -26,7 +26,7 @@ public void Handle(List hostServices, int maxParallelism) Prepare(hostServices, maxParallelism); hostServices.RunAll(hostService => { - var steps = string.Join("=>", hostService.Processor.BuildSteps.OrderBy(step => step.BuildOrder).Select(s => s.Name)); + var steps = string.Join("=>", hostService.Processor.BuildSteps.OrderBy(static step => step.BuildOrder).Select(static s => s.Name)); Logger.LogInfo($"Building {hostService.Models.Count} file(s) in {hostService.Processor.Name}({steps})..."); Logger.LogVerbose($"Processor {hostService.Processor.Name}: Prebuilding..."); Prebuild(hostService); @@ -144,7 +144,7 @@ private static void RunBuildSteps(IEnumerable buildSteps, Ac { if (buildSteps != null) { - foreach (var buildStep in buildSteps.OrderBy(step => step.BuildOrder)) + foreach (var buildStep in buildSteps.OrderBy(static step => step.BuildOrder)) { action(buildStep); } diff --git a/src/Docfx.Build/Conceptual/WordCounter.cs b/src/Docfx.Build/Conceptual/WordCounter.cs index 1a183713769..4efb8208626 100644 --- a/src/Docfx.Build/Conceptual/WordCounter.cs +++ b/src/Docfx.Build/Conceptual/WordCounter.cs @@ -9,6 +9,14 @@ internal static class WordCounter { private static readonly string[] ExcludeNodeXPaths = ["//title"]; +#if NET8_0_OR_GREATER + private static readonly System.Buffers.SearchValues SpecialChars = System.Buffers.SearchValues.Create(".?!;:,()[]"); +#else + private static readonly string SpecialChars = ".?!;:,()[]"; +#endif + + private static readonly char[] DelimiterChars = [' ', '\t', '\n']; + public static long CountWord(string html) { ArgumentNullException.ThrowIfNull(html); @@ -50,10 +58,7 @@ private static int CountWordInText(string text) return 0; } - string specialChars = ".?!;:,()[]"; - char[] delimiterChars = [' ', '\t', '\n']; - - string[] wordList = text.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries); - return wordList.Count(s => !s.Trim().All(specialChars.Contains)); + string[] wordList = text.Split(DelimiterChars, StringSplitOptions.RemoveEmptyEntries); + return wordList.Count(static s => !s.Trim().All(static c => SpecialChars.Contains(c))); } } diff --git a/src/Docfx.Build/DocumentBuildContext.cs b/src/Docfx.Build/DocumentBuildContext.cs index 7bbb5501752..b3da3dfb121 100644 --- a/src/Docfx.Build/DocumentBuildContext.cs +++ b/src/Docfx.Build/DocumentBuildContext.cs @@ -115,13 +115,13 @@ from u in xrefMaps public int MaxParallelism { get; } - public ConcurrentDictionary FileMap { get; } = new ConcurrentDictionary(FilePathComparer.OSPlatformSensitiveStringComparer); + public ConcurrentDictionary FileMap { get; } = new(FilePathComparer.OSPlatformSensitiveStringComparer); - public ConcurrentDictionary XRefSpecMap { get; } = new ConcurrentDictionary(); + public ConcurrentDictionary XRefSpecMap { get; } = new(); - public ConcurrentDictionary> TocMap { get; } = new ConcurrentDictionary>(FilePathComparer.OSPlatformSensitiveStringComparer); + public ConcurrentDictionary> TocMap { get; } = new(FilePathComparer.OSPlatformSensitiveStringComparer); - public HashSet XRef { get; } = new HashSet(); + public HashSet XRef { get; } = new(); public string RootTocPath { get; } @@ -129,11 +129,11 @@ from u in xrefMaps public ICustomHrefGenerator HrefGenerator { get; } - internal ConcurrentBag ManifestItems { get; } = new ConcurrentBag(); + internal ConcurrentBag ManifestItems { get; } = new(); - private ConcurrentDictionary ExternalXRefSpec { get; } = new ConcurrentDictionary(); + private ConcurrentDictionary ExternalXRefSpec { get; } = new(); - private ConcurrentDictionary UnknownUids { get; } = new ConcurrentDictionary(); + private ConcurrentDictionary UnknownUids { get; } = new(); public void ReportExternalXRefSpec(XRefSpec spec) { @@ -148,24 +148,6 @@ public void ReportExternalXRefSpec(XRefSpec spec) (uid, old) => old + spec); } - internal void SaveExternalXRefSpec(TextWriter writer) - { - JsonUtility.Serialize(writer, ExternalXRefSpec); - } - - internal void LoadExternalXRefSpec(TextReader reader) - { - if (!ExternalXRefSpec.IsEmpty) - { - throw new InvalidOperationException("Cannot load after reporting external xref spec."); - } - var dict = JsonUtility.Deserialize>(reader); - foreach (var pair in dict) - { - ExternalXRefSpec[pair.Key] = pair.Value; - } - } - public void ResolveExternalXRefSpec() { Task.WaitAll( @@ -275,12 +257,7 @@ public string GetFilePath(string key) { throw new ArgumentException("Key cannot be empty.", nameof(key)); } - if (FileMap.TryGetValue(key, out string filePath)) - { - return filePath; - } - - return null; + return FileMap.GetValueOrDefault(key); } // TODO: use this method instead of directly accessing FileMap diff --git a/src/Docfx.Build/DocumentBuilder.cs b/src/Docfx.Build/DocumentBuilder.cs index 85af3e459e1..ede13a86dd3 100644 --- a/src/Docfx.Build/DocumentBuilder.cs +++ b/src/Docfx.Build/DocumentBuilder.cs @@ -92,11 +92,11 @@ public void Build(IList parameters, string outputDirect if (parameter.Files.Count == 0) { - manifests.Add(new Manifest() { SourceBasePath = StringExtension.ToNormalizedPath(EnvironmentContext.BaseDirectory) }); + manifests.Add(new Manifest { SourceBasePath = StringExtension.ToNormalizedPath(EnvironmentContext.BaseDirectory) }); } else { - if (!parameter.Files.EnumerateFiles().Any(s => s.Type == DocumentType.Article)) + if (!parameter.Files.EnumerateFiles().Any(static s => s.Type == DocumentType.Article)) { if (!string.IsNullOrEmpty(parameter.GroupInfo?.Name)) { @@ -131,7 +131,7 @@ public void Build(IList parameters, string outputDirect else if (emptyContentGroups.Count > 0) { Logger.LogSuggestion( - $"No content file found in group: {string.Join(",", emptyContentGroups)}. Please make sure the content section of docfx.json is correctly configured.", + $"No content file found in group: {string.Join(',', emptyContentGroups)}. Please make sure the content section of docfx.json is correctly configured.", code: SuggestionCodes.Build.EmptyInputContents); } diff --git a/src/Docfx.Build/MarkupResultUtility.cs b/src/Docfx.Build/MarkupResultUtility.cs index c56041dd205..53a642c18cb 100644 --- a/src/Docfx.Build/MarkupResultUtility.cs +++ b/src/Docfx.Build/MarkupResultUtility.cs @@ -104,7 +104,7 @@ where string.Equals(attr.Name, "src", StringComparison.OrdinalIgnoreCase) || anchorInHref = null; } - link.Value = file.UrlEncode().ToString() + anchorInHref; + link.Value = file.UrlEncode() + anchorInHref; } if (!fileLinkSources.TryGetValue(file, out List sources)) diff --git a/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs b/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs index 0532739afde..a51bd936707 100644 --- a/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs +++ b/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs @@ -13,7 +13,7 @@ namespace Docfx.Build.Engine; sealed class HtmlPostProcessor : IPostProcessor { - public List Handlers { get; } = new List(); + public List Handlers { get; } = new(); private bool _handlerInitialized; diff --git a/src/Docfx.Build/Settings/ApplyTemplateSettings.cs b/src/Docfx.Build/Settings/ApplyTemplateSettings.cs index e0f40197f33..10928b715d6 100644 --- a/src/Docfx.Build/Settings/ApplyTemplateSettings.cs +++ b/src/Docfx.Build/Settings/ApplyTemplateSettings.cs @@ -18,10 +18,10 @@ public class ApplyTemplateSettings public string OutputFolder { get; } public bool DebugMode { get; } public bool TransformDocument { get; set; } = true; - public ExportSettings RawModelExportSettingsForDebug { get; set; } = new ExportSettings(DefaultRawModelExportSettings); - public ExportSettings ViewModelExportSettingsForDebug { get; set; } = new ExportSettings(DefaultRawModelExportSettings); - public ExportSettings RawModelExportSettings { get; set; } = new ExportSettings(DefaultRawModelExportSettings); - public ExportSettings ViewModelExportSettings { get; set; } = new ExportSettings(DefaultViewModelExportSettings); + public ExportSettings RawModelExportSettingsForDebug { get; set; } = new(DefaultRawModelExportSettings); + public ExportSettings ViewModelExportSettingsForDebug { get; set; } = new(DefaultRawModelExportSettings); + public ExportSettings RawModelExportSettings { get; set; } = new(DefaultRawModelExportSettings); + public ExportSettings ViewModelExportSettings { get; set; } = new(DefaultViewModelExportSettings); public ICustomHrefGenerator HrefGenerator { get; set; } public ApplyTemplateSettings(string inputFolder, string outputFolder) : this(inputFolder, outputFolder, null, false) diff --git a/src/Docfx.Build/TableOfContents/BuildTocDocument.cs b/src/Docfx.Build/TableOfContents/BuildTocDocument.cs index 66efb8bb5aa..d2c7b63318f 100644 --- a/src/Docfx.Build/TableOfContents/BuildTocDocument.cs +++ b/src/Docfx.Build/TableOfContents/BuildTocDocument.cs @@ -31,11 +31,11 @@ public override void Build(FileModel model, IHostService host) { var toc = (TocItemViewModel)model.Content; TocRestructureUtility.Restructure(toc, host.TableOfContentRestructions); - BuildCore(toc, model, host); + BuildCore(toc, model); // todo : metadata. } - private static void BuildCore(TocItemViewModel item, FileModel model, IHostService hostService, string includedFrom = null) + private static void BuildCore(TocItemViewModel item, FileModel model, string includedFrom = null) { if (item == null) { @@ -70,7 +70,7 @@ private static void BuildCore(TocItemViewModel item, FileModel model, IHostServi { foreach (var i in item.Items) { - BuildCore(i, model, hostService, includedFrom); + BuildCore(i, model, includedFrom); } } @@ -83,12 +83,6 @@ void UpdateDependencies(HashSet linkTos, Dictionary> dict, string path, LinkSourceInfo source) => dict[path] = dict.TryGetValue(path, out var sources) ? sources.Add(source) : ImmutableList.Create(source); diff --git a/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs b/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs index 20f57c0da71..b44e42053dc 100644 --- a/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs +++ b/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs @@ -9,10 +9,10 @@ public static class MarkdownTocReader { private const string ContinuableCharacters = ".,;:!?~"; private const string StopCharacters = @"\s\""\'<>"; - private const string XrefAutoLinkRegexString = @"(]+)>)"; + private const string XrefAutoLinkRegexString = "(]+)>)"; private const string XrefAutoLinkRegexWithQuoteString = @""; private const string XrefShortcutRegexWithQuoteString = @"@(?:(['""])(?\s*?\S+?[\s\S]*?)\1)"; - private const string XrefShortcutRegexString = $@"@(?[a-zA-Z](?:[{ContinuableCharacters}]?[^{StopCharacters}{ContinuableCharacters}])*)"; + private const string XrefShortcutRegexString = $"@(?[a-zA-Z](?:[{ContinuableCharacters}]?[^{StopCharacters}{ContinuableCharacters}])*)"; public static List LoadToc(string tocContent, string filePath) { diff --git a/src/Docfx.Build/TableOfContents/TocResolver.cs b/src/Docfx.Build/TableOfContents/TocResolver.cs index d8b11f962e7..74461c237db 100644 --- a/src/Docfx.Build/TableOfContents/TocResolver.cs +++ b/src/Docfx.Build/TableOfContents/TocResolver.cs @@ -23,15 +23,15 @@ public TocItemInfo Resolve(string file) return ResolveItem(_collection[file], new Stack()); } - private TocItemInfo ResolveItem(TocItemInfo wrapper, Stack stack, bool isRoot = true) + private TocItemInfo ResolveItem(TocItemInfo wrapper, Stack stack) { using (new LoggerFileScope(wrapper.File.File)) { - return ResolveItemCore(wrapper, stack, isRoot); + return ResolveItemCore(wrapper, stack); } } - private TocItemInfo ResolveItemCore(TocItemInfo wrapper, Stack stack, bool isRoot) + private TocItemInfo ResolveItemCore(TocItemInfo wrapper, Stack stack) { if (wrapper.IsResolved) { @@ -125,7 +125,7 @@ private TocItemInfo ResolveItemCore(TocItemInfo wrapper, Stack stac if (item.Items != null && item.Items.Count > 0) { item.Items = new List(from i in item.Items - select ResolveItem(new TocItemInfo(file, i), stack, false) into r + select ResolveItem(new TocItemInfo(file, i), stack) into r where r != null select r.Content); if (string.IsNullOrEmpty(item.TopicHref) && string.IsNullOrEmpty(item.TopicUid)) @@ -207,7 +207,7 @@ select ResolveItem(new TocItemInfo(file, i), stack, false) into r { for (int i = 0; i < item.Items.Count; i++) { - item.Items[i] = ResolveItem(new TocItemInfo(file, item.Items[i]), stack, false).Content; + item.Items[i] = ResolveItem(new TocItemInfo(file, item.Items[i]), stack).Content; } } } diff --git a/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorLoader.cs b/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorLoader.cs index e281cf817bc..9e57166cdfd 100644 --- a/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorLoader.cs +++ b/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorLoader.cs @@ -23,7 +23,7 @@ public PreprocessorLoader(ResourceFileReader reader, DocumentBuildContext contex public IEnumerable LoadStandalones() { // Only files under root folder are allowed - foreach (var res in _reader.GetResources($@"^[^/]*{Regex.Escape(TemplateJintPreprocessor.StandaloneExtension)}$")) + foreach (var res in _reader.GetResources($"^[^/]*{Regex.Escape(TemplateJintPreprocessor.StandaloneExtension)}$")) { var name = Path.GetFileNameWithoutExtension(res.Path.Remove(res.Path.LastIndexOf('.'))); var preprocessor = Load(res, name); diff --git a/src/Docfx.Build/TemplateProcessors/Preprocessors/TemplateUtility.cs b/src/Docfx.Build/TemplateProcessors/Preprocessors/TemplateUtility.cs index 74b05684ca2..c38d6b25eb9 100644 --- a/src/Docfx.Build/TemplateProcessors/Preprocessors/TemplateUtility.cs +++ b/src/Docfx.Build/TemplateProcessors/Preprocessors/TemplateUtility.cs @@ -54,7 +54,7 @@ public string GetHrefFromRoot(string originalHref, string sourceFileKey) Logger.LogWarning($"Invalid file link: ({originalHref})", file: sourceFileKey, code: WarningCodes.Build.InvalidFileLink); return originalHref; } - return file.UrlEncode().ToString() + UriUtility.GetQueryStringAndFragment(originalHref); + return file.UrlEncode() + UriUtility.GetQueryStringAndFragment(originalHref); } public string Markup(string markdown, string sourceFileKey) diff --git a/src/Docfx.Build/TemplateProcessors/Template.cs b/src/Docfx.Build/TemplateProcessors/Template.cs index cdd60b76cd4..eeb48b51fd3 100644 --- a/src/Docfx.Build/TemplateProcessors/Template.cs +++ b/src/Docfx.Build/TemplateProcessors/Template.cs @@ -11,8 +11,6 @@ public class Template private const string Primary = ".primary"; private const string Auxiliary = ".aux"; - private readonly object _locker = new(); - public string Name { get; } public string ScriptName { get; } public string Extension { get; } @@ -62,7 +60,7 @@ public Template(ITemplateRenderer renderer, ITemplatePreprocessor preprocessor) /// }, /// isShared: true /// } - /// + /// /// } /// /// diff --git a/src/Docfx.Build/TemplateProcessors/ViewRenderers/RendererLoader.cs b/src/Docfx.Build/TemplateProcessors/ViewRenderers/RendererLoader.cs index 779d18dac73..d239970d702 100644 --- a/src/Docfx.Build/TemplateProcessors/ViewRenderers/RendererLoader.cs +++ b/src/Docfx.Build/TemplateProcessors/ViewRenderers/RendererLoader.cs @@ -21,7 +21,7 @@ public RendererLoader(ResourceFileReader reader, int maxParallelism) public IEnumerable LoadAll() { // Only files under root folder are allowed - foreach (var res in _reader.GetResources($@"^[^/]*({Regex.Escape(MustacheTemplateRenderer.Extension)})$")) + foreach (var res in _reader.GetResources($"^[^/]*({Regex.Escape(MustacheTemplateRenderer.Extension)})$")) { var renderer = Load(res); if (renderer != null) diff --git a/src/Docfx.Build/XRefMaps/XRefArchive.cs b/src/Docfx.Build/XRefMaps/XRefArchive.cs index dc96cd30968..893dbae35aa 100644 --- a/src/Docfx.Build/XRefMaps/XRefArchive.cs +++ b/src/Docfx.Build/XRefMaps/XRefArchive.cs @@ -123,7 +123,7 @@ public string CreateMinor(XRefMap map, IEnumerable names) } while (true) { - var entryName = Guid.NewGuid().ToString() + ".yml"; + var entryName = Guid.NewGuid() + ".yml"; if (!HasEntryCore(entryName)) { return CreateCore(entryName, map); diff --git a/src/Docfx.Build/XRefMaps/XRefMap.cs b/src/Docfx.Build/XRefMaps/XRefMap.cs index aab0db4a651..f376109837a 100644 --- a/src/Docfx.Build/XRefMaps/XRefMap.cs +++ b/src/Docfx.Build/XRefMaps/XRefMap.cs @@ -61,7 +61,7 @@ public class XRefMap : IXRefContainer [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Others { get; set; } = new Dictionary(); + public Dictionary Others { get; set; } = new(); public void Sort() { diff --git a/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs b/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs index 4e9222570ea..567a7ecab4d 100644 --- a/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs +++ b/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs @@ -76,7 +76,7 @@ private ValueTask ReadLocalFileWithFallback(Uri uri, Cancellatio return ReadLocalFileAsync(localFilePath, token); } } - throw new FileNotFoundException($"Cannot find xref map file {uri.OriginalString} in path: {string.Join(",", _localFileFolders)}", uri.OriginalString); + throw new FileNotFoundException($"Cannot find xref map file {uri.OriginalString} in path: {string.Join(',', _localFileFolders)}", uri.OriginalString); } /// diff --git a/src/Docfx.Common/FileModelParser.cs b/src/Docfx.Common/FileModelParser.cs index fb54a65f42e..af3e13aaae7 100644 --- a/src/Docfx.Common/FileModelParser.cs +++ b/src/Docfx.Common/FileModelParser.cs @@ -16,7 +16,7 @@ public static FileMappingItem ParseItem(JToken item) } else if (item.Type == JTokenType.Property) { - JProperty jProperty = item as JProperty; + JProperty jProperty = (JProperty)item; FileMappingItem model = new() { Name = jProperty.Name }; var value = jProperty.Value; if (value.Type == JTokenType.Array) diff --git a/src/Docfx.Common/Git/GitUtility.cs b/src/Docfx.Common/Git/GitUtility.cs index cc8016ae1e0..9bc3587500c 100644 --- a/src/Docfx.Common/Git/GitUtility.cs +++ b/src/Docfx.Common/Git/GitUtility.cs @@ -116,7 +116,7 @@ static string GitUrlToHttps(string url) static Repo? GetRepoInfoCore(string directory, string gitRoot) { - var remoteUrls = ParseRemoteUrls(directory, gitRoot).ToArray(); + var remoteUrls = ParseRemoteUrls(gitRoot).ToArray(); var url = remoteUrls.FirstOrDefault(r => r.key == "origin").value ?? remoteUrls.FirstOrDefault().value; if (string.IsNullOrEmpty(url)) return null; @@ -158,7 +158,7 @@ static string GitUrlToHttps(string url) } - static IEnumerable<(string key, string value)> ParseRemoteUrls(string directory, string gitRoot) + static IEnumerable<(string key, string value)> ParseRemoteUrls(string gitRoot) { var configPath = Path.Combine(gitRoot, "config"); if (!File.Exists(configPath)) @@ -215,7 +215,7 @@ private static string ResolveDocfxSourceRepoUrl(string originalUrl) { // Replace `/{orgName}/{repoName}` and remove `.git` suffix. var builder = new UriBuilder(parsedOriginalUrl); - builder.Path = Regex.Replace(builder.Path.TrimEnd(".git"), @"^/[^/]+/[^/]+", $"/{orgName}/{repoName}"); + builder.Path = Regex.Replace(builder.Path.TrimEnd(".git"), "^/[^/]+/[^/]+", $"/{orgName}/{repoName}"); return builder.Uri.ToString(); } diff --git a/src/Docfx.Common/Path/RelativePath.cs b/src/Docfx.Common/Path/RelativePath.cs index 96a80dd33a1..a804d5db46f 100644 --- a/src/Docfx.Common/Path/RelativePath.cs +++ b/src/Docfx.Common/Path/RelativePath.cs @@ -314,7 +314,7 @@ public bool Equals(RelativePath other) public override string ToString() => (_isFromWorkingFolder ? NormalizedWorkingFolder : "") + string.Concat(Enumerable.Repeat(ParentDirectory, _parentDirectoryCount)) + - string.Join("/", _parts); + string.Join('/', _parts); /// /// Test whether a relative path starts with another folder relative path diff --git a/src/Docfx.Common/UriUtility.cs b/src/Docfx.Common/UriUtility.cs index adb968773e0..1daf3131e3e 100644 --- a/src/Docfx.Common/UriUtility.cs +++ b/src/Docfx.Common/UriUtility.cs @@ -93,7 +93,7 @@ public static (string path, string query, string fragment) Split(string uri) { ArgumentNullException.ThrowIfNull(uri); - if (uri?.Length == 0) + if (uri.Length == 0) { return (string.Empty, string.Empty, string.Empty); } diff --git a/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageWriter.cs b/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageWriter.cs index 959ca77ae05..e74f785437b 100644 --- a/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageWriter.cs +++ b/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageWriter.cs @@ -9,30 +9,28 @@ namespace Docfx.DataContracts.Common; public class ExternalReferencePackageWriter : IDisposable { - private readonly string _packageFile; private readonly ZipArchive _zip; - private ExternalReferencePackageWriter(string packageFile, Uri baseUri, bool append) + private ExternalReferencePackageWriter(string packageFile, bool append) { - _packageFile = packageFile; if (append && File.Exists(packageFile)) { - _zip = new ZipArchive(new FileStream(_packageFile, FileMode.Open, FileAccess.ReadWrite), ZipArchiveMode.Update); + _zip = new ZipArchive(new FileStream(packageFile, FileMode.Open, FileAccess.ReadWrite), ZipArchiveMode.Update); } else { - _zip = new ZipArchive(new FileStream(_packageFile, FileMode.Create, FileAccess.ReadWrite), ZipArchiveMode.Create); + _zip = new ZipArchive(new FileStream(packageFile, FileMode.Create, FileAccess.ReadWrite), ZipArchiveMode.Create); } } public static ExternalReferencePackageWriter Create(string packageFile, Uri baseUri) { - return new ExternalReferencePackageWriter(packageFile, baseUri, false); + return new ExternalReferencePackageWriter(packageFile, false); } public static ExternalReferencePackageWriter Append(string packageFile, Uri baseUri) { - return new ExternalReferencePackageWriter(packageFile, baseUri, true); + return new ExternalReferencePackageWriter(packageFile, true); } public void AddOrUpdateEntry(string entryName, List vm) diff --git a/src/Docfx.DataContracts.Common/ReferenceViewModel.cs b/src/Docfx.DataContracts.Common/ReferenceViewModel.cs index 6a11fea5fbd..71e1f36b81a 100644 --- a/src/Docfx.DataContracts.Common/ReferenceViewModel.cs +++ b/src/Docfx.DataContracts.Common/ReferenceViewModel.cs @@ -50,7 +50,7 @@ public class ReferenceViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Name)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList NameInDevLangs { get; private set; } = new SortedList(); + public SortedList NameInDevLangs { get; private set; } = new(); [YamlMember(Alias = Constants.PropertyName.NameWithType)] [JsonProperty(Constants.PropertyName.NameWithType)] @@ -60,7 +60,7 @@ public class ReferenceViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.NameWithType)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList NameWithTypeInDevLangs { get; private set; } = new SortedList(); + public SortedList NameWithTypeInDevLangs { get; private set; } = new(); [YamlMember(Alias = Constants.PropertyName.FullName)] [JsonProperty(Constants.PropertyName.FullName)] @@ -70,17 +70,17 @@ public class ReferenceViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.FullName)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList FullNameInDevLangs { get; private set; } = new SortedList(); + public SortedList FullNameInDevLangs { get; private set; } = new(); [ExtensibleMember(Constants.ExtensionMemberPrefix.Spec)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> Specs { get; private set; } = new SortedList>(); + public SortedList> Specs { get; private set; } = new(); [ExtensibleMember] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary Additional { get; private set; } = new Dictionary(); + public Dictionary Additional { get; private set; } = new(); [EditorBrowsable(EditorBrowsableState.Never)] [YamlIgnore] diff --git a/src/Docfx.DataContracts.Common/TocItemViewModel.cs b/src/Docfx.DataContracts.Common/TocItemViewModel.cs index f26eeb0b0aa..274c9acfe27 100644 --- a/src/Docfx.DataContracts.Common/TocItemViewModel.cs +++ b/src/Docfx.DataContracts.Common/TocItemViewModel.cs @@ -110,7 +110,7 @@ public class TocItemViewModel [ExtensibleMember] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); [EditorBrowsable(EditorBrowsableState.Never)] [YamlIgnore] diff --git a/src/Docfx.DataContracts.RestApi/RestApiItemViewModelBase.cs b/src/Docfx.DataContracts.RestApi/RestApiItemViewModelBase.cs index be814b981bc..71ebce5c825 100644 --- a/src/Docfx.DataContracts.RestApi/RestApiItemViewModelBase.cs +++ b/src/Docfx.DataContracts.RestApi/RestApiItemViewModelBase.cs @@ -58,5 +58,5 @@ public class RestApiItemViewModelBase : IOverwriteDocumentViewModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.RestApi/RestApiParameterViewModel.cs b/src/Docfx.DataContracts.RestApi/RestApiParameterViewModel.cs index e785639b61b..2211bbc46fc 100644 --- a/src/Docfx.DataContracts.RestApi/RestApiParameterViewModel.cs +++ b/src/Docfx.DataContracts.RestApi/RestApiParameterViewModel.cs @@ -25,5 +25,5 @@ public class RestApiParameterViewModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.RestApi/RestApiResponseViewModel.cs b/src/Docfx.DataContracts.RestApi/RestApiResponseViewModel.cs index 03853fc4cf0..a2fe4118d8e 100644 --- a/src/Docfx.DataContracts.RestApi/RestApiResponseViewModel.cs +++ b/src/Docfx.DataContracts.RestApi/RestApiResponseViewModel.cs @@ -35,5 +35,5 @@ public class RestApiResponseViewModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.RestApi/RestApiTagViewModel.cs b/src/Docfx.DataContracts.RestApi/RestApiTagViewModel.cs index 2f853dbc296..5d095f314a6 100644 --- a/src/Docfx.DataContracts.RestApi/RestApiTagViewModel.cs +++ b/src/Docfx.DataContracts.RestApi/RestApiTagViewModel.cs @@ -48,5 +48,5 @@ public class RestApiTagViewModel : IOverwriteDocumentViewModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/ApiParameter.cs b/src/Docfx.DataContracts.UniversalReference/ApiParameter.cs index fc656aaaba5..2f367ac46ca 100644 --- a/src/Docfx.DataContracts.UniversalReference/ApiParameter.cs +++ b/src/Docfx.DataContracts.UniversalReference/ApiParameter.cs @@ -48,5 +48,5 @@ public class ApiParameter [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/ArgumentInfo.cs b/src/Docfx.DataContracts.UniversalReference/ArgumentInfo.cs index 58fca7cde2a..09f70d2c4b0 100644 --- a/src/Docfx.DataContracts.UniversalReference/ArgumentInfo.cs +++ b/src/Docfx.DataContracts.UniversalReference/ArgumentInfo.cs @@ -26,5 +26,5 @@ public class ArgumentInfo [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/AttributeInfo.cs b/src/Docfx.DataContracts.UniversalReference/AttributeInfo.cs index 77d2d9f0d9b..073941c6215 100644 --- a/src/Docfx.DataContracts.UniversalReference/AttributeInfo.cs +++ b/src/Docfx.DataContracts.UniversalReference/AttributeInfo.cs @@ -36,5 +36,5 @@ public class AttributeInfo [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/ExceptionInfo.cs b/src/Docfx.DataContracts.UniversalReference/ExceptionInfo.cs index 4d40ce957b0..c7fad174904 100644 --- a/src/Docfx.DataContracts.UniversalReference/ExceptionInfo.cs +++ b/src/Docfx.DataContracts.UniversalReference/ExceptionInfo.cs @@ -29,5 +29,5 @@ public class ExceptionInfo [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/InheritanceTree.cs b/src/Docfx.DataContracts.UniversalReference/InheritanceTree.cs index 122d11c3067..6d4cfc1fa15 100644 --- a/src/Docfx.DataContracts.UniversalReference/InheritanceTree.cs +++ b/src/Docfx.DataContracts.UniversalReference/InheritanceTree.cs @@ -32,5 +32,5 @@ public class InheritanceTree [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs b/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs index c8d0eec3707..f4eb502560b 100644 --- a/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs +++ b/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs @@ -46,7 +46,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Parent)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList ParentInDevLangs { get; set; } = new SortedList(); + public SortedList ParentInDevLangs { get; set; } = new(); [YamlMember(Alias = "package")] [JsonProperty("package")] @@ -57,7 +57,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember("package" + Constants.PrefixSeparator)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList PackageInDevLangs { get; set; } = new SortedList(); + public SortedList PackageInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.Children)] [MergeOption(MergeOption.Ignore)] // todo : merge more children @@ -69,7 +69,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Children)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> ChildrenInDevLangs { get; set; } = new SortedList>(); + public SortedList> ChildrenInDevLangs { get; set; } = new(); /// /// item's link URL @@ -93,7 +93,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Name)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList Names { get; set; } = new SortedList(); + public SortedList Names { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.NameWithType)] [JsonProperty(Constants.PropertyName.NameWithType)] @@ -103,7 +103,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.NameWithType)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList NamesWithType { get; set; } = new SortedList(); + public SortedList NamesWithType { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.FullName)] [JsonProperty(Constants.PropertyName.FullName)] @@ -113,7 +113,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.FullName)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList FullNames { get; set; } = new SortedList(); + public SortedList FullNames { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.Type)] [JsonProperty(Constants.PropertyName.Type)] @@ -131,7 +131,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Source)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList SourceInDevLangs { get; set; } = new SortedList(); + public SortedList SourceInDevLangs { get; set; } = new(); /// /// item's documentation's source detail @@ -151,7 +151,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Assemblies)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> AssemblyNameListInDevLangs { get; set; } = new SortedList>(); + public SortedList> AssemblyNameListInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.Namespace)] [JsonProperty(Constants.PropertyName.Namespace)] @@ -162,7 +162,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Namespace)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList NamespaceNameInDevLangs { get; set; } = new SortedList(); + public SortedList NamespaceNameInDevLangs { get; set; } = new(); /// /// item's summary @@ -213,7 +213,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Overridden)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList OverriddenInDevLangs { get; set; } = new SortedList(); + public SortedList OverriddenInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.Overload)] [JsonProperty(Constants.PropertyName.Overload)] @@ -224,7 +224,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Overload)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList OverloadInDevLangs { get; set; } = new SortedList(); + public SortedList OverloadInDevLangs { get; set; } = new(); [YamlMember(Alias = "exceptions")] [JsonProperty("exceptions")] @@ -234,7 +234,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Exceptions)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> ExceptionsInDevLangs { get; set; } = new SortedList>(); + public SortedList> ExceptionsInDevLangs { get; set; } = new(); [YamlMember(Alias = "seealso")] [JsonProperty("seealso")] @@ -283,7 +283,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Inheritance)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> InheritanceInDevLangs { get; set; } = new SortedList>(); + public SortedList> InheritanceInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.DerivedClasses)] [MergeOption(MergeOption.Ignore)] @@ -295,7 +295,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.DerivedClasses)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> DerivedClassesInDevLangs { get; set; } = new SortedList>(); + public SortedList> DerivedClassesInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.Implements)] [MergeOption(MergeOption.Ignore)] // todo : merge more children @@ -307,7 +307,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Implements)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> ImplementsInDevLangs { get; set; } = new SortedList>(); + public SortedList> ImplementsInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.InheritedMembers)] [MergeOption(MergeOption.Ignore)] // todo : merge more children @@ -319,7 +319,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.InheritedMembers)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> InheritedMembersInDevLangs { get; set; } = new SortedList>(); + public SortedList> InheritedMembersInDevLangs { get; set; } = new(); [YamlMember(Alias = Constants.PropertyName.ExtensionMethods)] [MergeOption(MergeOption.Ignore)] // todo : merge more children @@ -331,7 +331,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.ExtensionMethods)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> ExtensionMethodsInDevLangs { get; set; } = new SortedList>(); + public SortedList> ExtensionMethodsInDevLangs { get; set; } = new(); /// /// item's conceptual @@ -352,12 +352,12 @@ public class ItemViewModel : IOverwriteDocumentViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Platform)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList> PlatformInDevLangs { get; set; } = new SortedList>(); + public SortedList> PlatformInDevLangs { get; set; } = new(); [ExtensibleMember] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); [EditorBrowsable(EditorBrowsableState.Never)] [YamlIgnore] diff --git a/src/Docfx.DataContracts.UniversalReference/LinkInfo.cs b/src/Docfx.DataContracts.UniversalReference/LinkInfo.cs index 6573f89f8a9..7a18c78acfb 100644 --- a/src/Docfx.DataContracts.UniversalReference/LinkInfo.cs +++ b/src/Docfx.DataContracts.UniversalReference/LinkInfo.cs @@ -39,7 +39,7 @@ public class LinkInfo [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } public enum LinkType diff --git a/src/Docfx.DataContracts.UniversalReference/NamedArgumentInfo.cs b/src/Docfx.DataContracts.UniversalReference/NamedArgumentInfo.cs index 3ab8204f0f2..112111323d2 100644 --- a/src/Docfx.DataContracts.UniversalReference/NamedArgumentInfo.cs +++ b/src/Docfx.DataContracts.UniversalReference/NamedArgumentInfo.cs @@ -31,5 +31,5 @@ public class NamedArgumentInfo [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/PageViewModel.cs b/src/Docfx.DataContracts.UniversalReference/PageViewModel.cs index 2d9128399ae..dbe7b09c8d1 100644 --- a/src/Docfx.DataContracts.UniversalReference/PageViewModel.cs +++ b/src/Docfx.DataContracts.UniversalReference/PageViewModel.cs @@ -15,14 +15,14 @@ public class PageViewModel [YamlMember(Alias = "items")] [JsonProperty("items")] [JsonPropertyName("items")] - public List Items { get; set; } = new List(); + public List Items { get; set; } = new(); [YamlMember(Alias = "references")] [JsonProperty("references")] [JsonPropertyName("references")] [UniqueIdentityReferenceIgnore] [MarkdownContentIgnore] - public List References { get; set; } = new List(); + public List References { get; set; } = new(); [YamlMember(Alias = "shouldSkipMarkup")] [JsonProperty("shouldSkipMarkup")] @@ -32,5 +32,5 @@ public class PageViewModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs b/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs index c228ef41a79..7ab5e2fa0aa 100644 --- a/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs +++ b/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs @@ -47,12 +47,12 @@ public class SyntaxDetailViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Return)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList ReturnInDevLangs { get; set; } = new SortedList(); + public SortedList ReturnInDevLangs { get; set; } = new(); [ExtensibleMember] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); [EditorBrowsable(EditorBrowsableState.Never)] [YamlIgnore] diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs b/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs index 8dd02350c9a..7842c8b625f 100644 --- a/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs +++ b/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs @@ -602,18 +602,21 @@ void EnumFields(INamedTypeSymbol type) return; if (config.EnumSortOrder is EnumSortOrder.Alphabetic) - items = items.OrderBy(m => m.Name).ToList(); + items = items.OrderBy(static m => m.Name).ToList(); body.Add((Heading)new H2 { h2 = "Fields" }); body.Add(new Parameters { parameters = items.Select(ToParameter).ToArray() }); + return; + Parameter ToParameter(IFieldSymbol item) { var docs = Comment(item, compilation) is { } comment ? string.Join("\n\n", comment.Summary, comment.Remarks) : null; return new() { - name = item.Name, @default = $"{item.ConstantValue}", + name = item.Name, + @default = $"{item.ConstantValue}", deprecated = Deprecated(item), preview = Preview(item), description = docs, diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs b/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs index b85ab3784d6..baabab65bd3 100644 --- a/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs +++ b/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs @@ -16,17 +16,14 @@ namespace Docfx.Dotnet; partial class DotnetApiCatalog { - private static async Task> Compile(ExtractMetadataConfig config, DotnetApiOptions options) + private static async Task> Compile(ExtractMetadataConfig config) { var files = config.Files?.Select(s => new FileInformation(s)) .GroupBy(f => f.Type) .ToDictionary(s => s.Key, s => s.Distinct().ToList()) ?? new(); var msbuildProperties = config.MSBuildProperties ?? new Dictionary(); - if (!msbuildProperties.ContainsKey("Configuration")) - { - msbuildProperties["Configuration"] = "Release"; - } + msbuildProperties.TryAdd("Configuration", "Release"); // NOTE: // logger parameter is not works when using Roslyn 4.9.0 or later. diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs b/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs index e619ded5880..3a8e0fd6b2f 100644 --- a/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs +++ b/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs @@ -44,6 +44,9 @@ private static void CreateManagedReference(List<(IAssemblySymbol symbol, Compila ResolveAndExportYamlMetadata(allMembers, allReferences); + return; + + void ResolveAndExportYamlMetadata( Dictionary allMembers, Dictionary allReferences) { diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.cs b/src/Docfx.Dotnet/DotnetApiCatalog.cs index 0c9c5da1f06..948cb23cf8c 100644 --- a/src/Docfx.Dotnet/DotnetApiCatalog.cs +++ b/src/Docfx.Dotnet/DotnetApiCatalog.cs @@ -84,7 +84,7 @@ internal static async Task Exec(MetadataJsonConfig config, DotnetApiOptions opti async Task Build(ExtractMetadataConfig config, DotnetApiOptions options) { - var assemblies = await Compile(config, options); + var assemblies = await Compile(config); switch (config.OutputFormat) { @@ -148,6 +148,8 @@ private static ExtractMetadataConfig ConvertConfig(MetadataJsonItemConfig config var expandedFiles = GlobUtility.ExpandFileMapping(EnvironmentContext.BaseDirectory, projects); var expandedReferences = GlobUtility.ExpandFileMapping(EnvironmentContext.BaseDirectory, references); + ExtractMetadataConfig.UseClrTypeNames = configModel?.UseClrTypeNames ?? false; + return new ExtractMetadataConfig { ShouldSkipMarkup = configModel?.ShouldSkipMarkup ?? false, @@ -167,8 +169,8 @@ private static ExtractMetadataConfig ConvertConfig(MetadataJsonItemConfig config MemberLayout = configModel?.MemberLayout ?? default, EnumSortOrder = configModel?.EnumSortOrder ?? default, AllowCompilationErrors = configModel?.AllowCompilationErrors ?? false, - Files = expandedFiles.Items.SelectMany(s => s.Files).ToList(), - References = expandedReferences?.Items.SelectMany(s => s.Files).ToList(), + Files = expandedFiles.Items.SelectMany(static s => s.Files).ToList(), + References = expandedReferences?.Items.SelectMany(static s => s.Files).ToList() }; } } diff --git a/src/Docfx.Dotnet/Filters/AttributeFilterInfo.cs b/src/Docfx.Dotnet/Filters/AttributeFilterInfo.cs index 64010532816..63b3ddb6737 100644 --- a/src/Docfx.Dotnet/Filters/AttributeFilterInfo.cs +++ b/src/Docfx.Dotnet/Filters/AttributeFilterInfo.cs @@ -14,7 +14,7 @@ internal class AttributeFilterInfo public List ConstructorArguments { get; set; } [YamlMember(Alias = "ctorNamedArguments")] - public Dictionary ConstructorNamedArguments { get; set; } = new Dictionary(); + public Dictionary ConstructorNamedArguments { get; set; } = new(); public bool ContainedIn(SymbolFilterData symbol) { diff --git a/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs b/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs index e222db37f73..83d70d0292f 100644 --- a/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs +++ b/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs @@ -10,10 +10,10 @@ namespace Docfx.Dotnet; internal class ConfigFilterRule { [YamlMember(Alias = "apiRules")] - public List ApiRules { get; set; } = new List(); + public List ApiRules { get; set; } = new(); [YamlMember(Alias = "attributeRules")] - public List AttributeRules { get; set; } = new List(); + public List AttributeRules { get; set; } = new(); public bool CanVisitApi(SymbolFilterData symbol) { diff --git a/src/Docfx.Dotnet/Filters/RoslynFilterData.cs b/src/Docfx.Dotnet/Filters/RoslynFilterData.cs index 9b23bbbfa70..ee12d0fd40a 100644 --- a/src/Docfx.Dotnet/Filters/RoslynFilterData.cs +++ b/src/Docfx.Dotnet/Filters/RoslynFilterData.cs @@ -109,7 +109,7 @@ where constant.Value.Equals(member.ConstantValue) return ""; } - return string.Join(",", constant.Values.Select(GetLiteralString)); + return string.Join(',', constant.Values.Select(GetLiteralString)); } var value = constant.Value; diff --git a/src/Docfx.Dotnet/ManagedReference/ExtractMetadataConfig.cs b/src/Docfx.Dotnet/ManagedReference/ExtractMetadataConfig.cs index cf8b4674713..0cf7164962e 100644 --- a/src/Docfx.Dotnet/ManagedReference/ExtractMetadataConfig.cs +++ b/src/Docfx.Dotnet/ManagedReference/ExtractMetadataConfig.cs @@ -42,4 +42,7 @@ internal class ExtractMetadataConfig public Dictionary MSBuildProperties { get; init; } public bool AllowCompilationErrors { get; init; } + + public static bool UseClrTypeNames { get; set; } + } diff --git a/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs b/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs index e740c12868a..80252839716 100644 --- a/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs +++ b/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs @@ -72,7 +72,7 @@ public class ItemViewModel : IOverwriteDocumentViewModel, IItemWithMetadata [ExtensibleMember(Constants.ExtensionMemberPrefix.Name)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList Names { get; set; } = new SortedList(); + public SortedList Names { get; set; } = new(); [YamlIgnore] [Newtonsoft.Json.JsonIgnore] @@ -128,7 +128,7 @@ public string NameForVB [ExtensibleMember(Constants.ExtensionMemberPrefix.NameWithType)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList NamesWithType { get; set; } = new SortedList(); + public SortedList NamesWithType { get; set; } = new(); [YamlIgnore] [Newtonsoft.Json.JsonIgnore] @@ -184,7 +184,7 @@ public string NameWithTypeForVB [ExtensibleMember(Constants.ExtensionMemberPrefix.FullName)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList FullNames { get; set; } = new SortedList(); + public SortedList FullNames { get; set; } = new(); [YamlIgnore] [Newtonsoft.Json.JsonIgnore] @@ -314,7 +314,7 @@ public string FullNameForVB [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] [UniqueIdentityReference] - public List SeeAlsosUidReference => SeeAlsos?.Where(s => s.LinkType == LinkType.CRef)?.Select(s => s.LinkId).ToList(); + public List SeeAlsosUidReference => SeeAlsos?.Where(s => s.LinkType == LinkType.CRef).Select(s => s.LinkId).ToList(); [YamlMember(Alias = Constants.PropertyName.Inheritance)] [MergeOption(MergeOption.Ignore)] @@ -372,7 +372,7 @@ public string FullNameForVB [ExtensibleMember] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); [EditorBrowsable(EditorBrowsableState.Never)] [YamlIgnore] diff --git a/src/Docfx.Dotnet/ManagedReference/Models/PageViewModel.cs b/src/Docfx.Dotnet/ManagedReference/Models/PageViewModel.cs index 773a17f3bc9..dfe564a80da 100644 --- a/src/Docfx.Dotnet/ManagedReference/Models/PageViewModel.cs +++ b/src/Docfx.Dotnet/ManagedReference/Models/PageViewModel.cs @@ -14,14 +14,14 @@ public class PageViewModel [YamlMember(Alias = "items")] [JsonProperty("items")] [JsonPropertyName("items")] - public List Items { get; set; } = new List(); + public List Items { get; set; } = new(); [YamlMember(Alias = "references")] [JsonProperty("references")] [JsonPropertyName("references")] [UniqueIdentityReferenceIgnore] [MarkdownContentIgnore] - public List References { get; set; } = new List(); + public List References { get; set; } = new(); [YamlMember(Alias = "shouldSkipMarkup")] [JsonProperty("shouldSkipMarkup")] @@ -36,5 +36,5 @@ public class PageViewModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs b/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs index bb08565196a..330470f034b 100644 --- a/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs +++ b/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs @@ -22,7 +22,7 @@ public class SyntaxDetailViewModel [ExtensibleMember(Constants.ExtensionMemberPrefix.Content)] [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public SortedList Contents { get; set; } = new SortedList(); + public SortedList Contents { get; set; } = new(); [YamlIgnore] [Newtonsoft.Json.JsonIgnore] diff --git a/src/Docfx.Dotnet/ManagedReference/Resolvers/YamlMetadataResolver.cs b/src/Docfx.Dotnet/ManagedReference/Resolvers/YamlMetadataResolver.cs index 9651d9770bb..f8001c4132c 100644 --- a/src/Docfx.Dotnet/ManagedReference/Resolvers/YamlMetadataResolver.cs +++ b/src/Docfx.Dotnet/ManagedReference/Resolvers/YamlMetadataResolver.cs @@ -20,7 +20,7 @@ internal static class YamlMetadataResolver }; /// - /// TODO: input Namespace list instead; + /// TODO: input Namespace list instead; /// TODO: Save to ...yml.map /// /// @@ -102,7 +102,7 @@ private static MetadataItem GenerateNestedTocStructure(IEnumerable x.Type == MemberType.Namespace ? 0 : 1) .ThenBy(x => x.Name) .ToList(); + if (member.Type == MemberType.Namespace + && member.Items.All(x => x.Type == MemberType.Namespace)) + { + allReferences[member.Name] = new(); + } + } + return root; } private static IEnumerable GetParentNamespaces(string originalNamespace) { - var namespaces = originalNamespace.Split("."); + var namespaces = originalNamespace.Split('.'); var fullNamespace = ""; foreach (var @namespace in namespaces) { diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs index b8aa2f4c6ec..bf44f4f0c41 100644 --- a/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs +++ b/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs @@ -169,7 +169,7 @@ public override MetadataItem VisitNamedType(INamedTypeSymbol symbol) foreach (var p in symbol.TypeParameters) { - var param = VisitorHelper.GetTypeParameterDescription(p, item, GetXmlCommentParserContext(item)); + var param = VisitorHelper.GetTypeParameterDescription(p, item); item.Syntax.TypeParameters.Add(param); } } @@ -221,7 +221,7 @@ public override MetadataItem VisitMethod(IMethodSymbol symbol) foreach (var p in symbol.TypeParameters) { - var param = VisitorHelper.GetTypeParameterDescription(p, result, GetXmlCommentParserContext(result)); + var param = VisitorHelper.GetTypeParameterDescription(p, result); result.Syntax.TypeParameters.Add(param); } } @@ -272,7 +272,7 @@ public override MetadataItem VisitField(IFieldSymbol symbol) var typeGenericParameters = symbol.ContainingType.IsGenericType ? symbol.ContainingType.Accept(TypeGenericParameterNameVisitor.Instance) : EmptyListOfString; var id = AddSpecReference(symbol.Type, typeGenericParameters); - result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true, GetXmlCommentParserContext(result)); + result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true); Debug.Assert(result.Syntax.Return.Type != null); result.Attributes = GetAttributeInfo(symbol.GetAttributes()); @@ -302,7 +302,7 @@ public override MetadataItem VisitEvent(IEventSymbol symbol) } var id = AddSpecReference(symbol.Type, typeGenericParameters); - result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true, GetXmlCommentParserContext(result)); + result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true); Debug.Assert(result.Syntax.Return.Type != null); AddMemberImplements(symbol, result, typeGenericParameters); @@ -339,14 +339,14 @@ public override MetadataItem VisitProperty(IPropertySymbol symbol) foreach (var p in symbol.Parameters) { var id = AddSpecReference(p.Type, typeGenericParameters); - var param = VisitorHelper.GetParameterDescription(p, result, id, false, GetXmlCommentParserContext(result)); + var param = VisitorHelper.GetParameterDescription(p, result, id, false); Debug.Assert(param.Type != null); result.Syntax.Parameters.Add(param); } } { var id = AddSpecReference(symbol.Type, typeGenericParameters); - result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true, GetXmlCommentParserContext(result)); + result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true); Debug.Assert(result.Syntax.Return.Type != null); } @@ -374,7 +374,7 @@ public string AddReference(ISymbol symbol) Debug.Fail("Unexpected member type."); throw new InvalidOperationException("Unexpected member type."); } - return _generator.AddReference(symbol, _references, this); + return _generator.AddReference(symbol, _references); } public string AddReference(string id, string commentId) @@ -406,7 +406,7 @@ public string AddOverloadReference(ISymbol symbol) case MemberType.Constructor: case MemberType.Method: case MemberType.Operator: - return _generator.AddOverloadReference(symbol, _references, this); + return _generator.AddOverloadReference(symbol, _references); default: Debug.Fail("Unexpected member type."); throw new InvalidOperationException("Unexpected member type."); @@ -682,7 +682,7 @@ private void AddMethodSyntax(IMethodSymbol symbol, MetadataItem result, IReadOnl if (!symbol.ReturnsVoid) { var id = AddSpecReference(symbol.ReturnType, typeGenericParameters, methodGenericParameters); - result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true, GetXmlCommentParserContext(result)); + result.Syntax.Return = VisitorHelper.GetParameterDescription(symbol, result, id, true); result.Syntax.Return.Attributes = GetAttributeInfo(symbol.GetReturnTypeAttributes()); } @@ -696,7 +696,7 @@ private void AddMethodSyntax(IMethodSymbol symbol, MetadataItem result, IReadOnl foreach (var p in symbol.Parameters) { var id = AddSpecReference(p.Type, typeGenericParameters, methodGenericParameters); - var param = VisitorHelper.GetParameterDescription(p, result, id, false, GetXmlCommentParserContext(result)); + var param = VisitorHelper.GetParameterDescription(p, result, id, false); Debug.Assert(param.Type != null); param.Attributes = GetAttributeInfo(p.GetAttributes()); result.Syntax.Parameters.Add(param); diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs index 30209485407..0e55d5666b9 100644 --- a/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs +++ b/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs @@ -113,7 +113,7 @@ public static string GetOverloadIdBody(ISymbol symbol) return uidBody; } - public static ApiParameter GetParameterDescription(ISymbol symbol, MetadataItem item, string id, bool isReturn, XmlCommentParserContext context) + public static ApiParameter GetParameterDescription(ISymbol symbol, MetadataItem item, string id, bool isReturn) { string comment = isReturn ? item.CommentModel?.Returns : item.CommentModel?.GetParameter(symbol.Name); return new ApiParameter @@ -124,7 +124,7 @@ public static ApiParameter GetParameterDescription(ISymbol symbol, MetadataItem }; } - public static ApiParameter GetTypeParameterDescription(ITypeParameterSymbol symbol, MetadataItem item, XmlCommentParserContext context) + public static ApiParameter GetTypeParameterDescription(ITypeParameterSymbol symbol, MetadataItem item) { string comment = item.CommentModel?.GetTypeParameter(symbol.Name); return new ApiParameter diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs index 2086fb35908..2517ffe2526 100644 --- a/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs +++ b/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs @@ -61,7 +61,7 @@ public void GenerateSyntax(ISymbol symbol, SyntaxDetail syntax, SymbolFilter fil syntax.Content[SyntaxLanguage.VB] = SymbolFormatter.GetSyntax(symbol, SyntaxLanguage.VB, filter); } - public string AddReference(ISymbol symbol, Dictionary references, SymbolVisitorAdapter adapter) + public string AddReference(ISymbol symbol, Dictionary references) { var id = VisitorHelper.GetId(symbol); var reference = new ReferenceItem @@ -74,11 +74,7 @@ public string AddReference(ISymbol symbol, Dictionary ref }; GenerateReference(symbol, reference, false); - if (!references.ContainsKey(id)) - { - references[id] = reference; - } - else + if (!references.TryAdd(id, reference)) { references[id].Merge(reference); } @@ -86,7 +82,7 @@ public string AddReference(ISymbol symbol, Dictionary ref return id; } - public string AddOverloadReference(ISymbol symbol, Dictionary references, SymbolVisitorAdapter adapter) + public string AddOverloadReference(ISymbol symbol, Dictionary references) { var uidBody = VisitorHelper.GetOverloadIdBody(symbol); var reference = new ReferenceItem @@ -101,11 +97,7 @@ public string AddOverloadReference(ISymbol symbol, Dictionary + /// When enabled, the types uses the CLR type names instead of the C# aliases. + /// + [JsonProperty("useClrTypeNames")] + [JsonPropertyName("useClrTypeNames")] + public bool UseClrTypeNames { get; init; } } /// diff --git a/src/Docfx.Dotnet/Parsers/XmlComment.cs b/src/Docfx.Dotnet/Parsers/XmlComment.cs index 5b55008dd96..05a8b4d7716 100644 --- a/src/Docfx.Dotnet/Parsers/XmlComment.cs +++ b/src/Docfx.Dotnet/Parsers/XmlComment.cs @@ -22,7 +22,7 @@ namespace Docfx.Dotnet; internal class XmlComment { private const string IdSelector = @"((?![0-9])[\w_])+[\w\(\)\.\{\}\[\]\|\*\^~#@!`,_<>:]*"; - private static readonly Regex CommentIdRegex = new(@"^(?N|T|M|P|F|E|Overload):(?" + IdSelector + ")$", RegexOptions.Compiled); + private static readonly Regex CommentIdRegex = new("^(?N|T|M|P|F|E|Overload):(?" + IdSelector + ")$", RegexOptions.Compiled); private static readonly Regex RegionRegex = new(@"^\s*#region\s*(.*)$"); private static readonly Regex XmlRegionRegex = new(@"^\s*$"); private static readonly Regex EndRegionRegex = new(@"^\s*#endregion\s*.*$"); @@ -126,12 +126,12 @@ public static XmlComment Parse(string xml, XmlCommentParserContext context = nul public string GetParameter(string name) { - return Parameters.TryGetValue(name, out var value) ? value : null; + return Parameters.GetValueOrDefault(name); } public string GetTypeParameter(string name) { - return TypeParameters.TryGetValue(name, out var value) ? value : null; + return TypeParameters.GetValueOrDefault(name); } private void ResolveCode(XDocument doc, XmlCommentParserContext context) @@ -261,15 +261,11 @@ private Dictionary GetListContent(XPathNavigator navigator, stri string description = GetXmlValue(nav); if (!string.IsNullOrEmpty(name)) { - if (result.ContainsKey(name)) + if (!result.TryAdd(name, description)) { string path = context.Source?.Remote != null ? Path.Combine(EnvironmentContext.BaseDirectory, context.Source.Remote.Path) : context.Source?.Path; Logger.LogWarning($"Duplicate {contentType} '{name}' found in comments, the latter one is ignored.", file: StringExtension.ToDisplayPath(path), line: context.Source?.StartLine.ToString()); } - else - { - result.Add(name, description); - } } } diff --git a/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs b/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs index 71745376006..8c05b28d44c 100644 --- a/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs +++ b/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs @@ -201,7 +201,7 @@ public bool TryGetUri( { if (path.StartsWith(file.Path, StringComparison.OrdinalIgnoreCase)) { - var escapedPath = string.Join("/", path[file.Path.Length..].Split(['/', '\\']).Select(Uri.EscapeDataString)); + var escapedPath = string.Join('/', path[file.Path.Length..].Split(['/', '\\']).Select(Uri.EscapeDataString)); uri = mappedUri.Prefix + escapedPath + mappedUri.Suffix; return true; } diff --git a/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs b/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs index d4072fd286f..0a5dac67529 100644 --- a/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs +++ b/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs @@ -38,8 +38,10 @@ class SyntaxFormatter SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.EscapeKeywordIdentifiers | SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | - SymbolDisplayMiscellaneousOptions.UseSpecialTypes | - SymbolDisplayMiscellaneousOptions.RemoveAttributeSuffix, + SymbolDisplayMiscellaneousOptions.RemoveAttributeSuffix | + (ExtractMetadataConfig.UseClrTypeNames + ? SymbolDisplayMiscellaneousOptions.None + : SymbolDisplayMiscellaneousOptions.UseSpecialTypes), localOptions: SymbolDisplayLocalOptions.IncludeType, propertyStyle: SymbolDisplayPropertyStyle.ShowReadWriteDescriptor, delegateStyle: SymbolDisplayDelegateStyle.NameAndSignature, @@ -47,8 +49,13 @@ class SyntaxFormatter typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypes); private static readonly SymbolDisplayFormat s_syntaxTypeNameFormat = new( - genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, - miscellaneousOptions: SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.UseSpecialTypes, + genericsOptions: + SymbolDisplayGenericsOptions.IncludeTypeParameters, + miscellaneousOptions: + SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | + (ExtractMetadataConfig.UseClrTypeNames + ? SymbolDisplayMiscellaneousOptions.None + : SymbolDisplayMiscellaneousOptions.UseSpecialTypes), typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypes); private static readonly SymbolDisplayFormat s_syntaxEnumConstantFormat = s_syntaxFormat diff --git a/src/Docfx.Dotnet/SymbolFormatter.cs b/src/Docfx.Dotnet/SymbolFormatter.cs index bc305e4c5d8..d6fc9c4eac4 100644 --- a/src/Docfx.Dotnet/SymbolFormatter.cs +++ b/src/Docfx.Dotnet/SymbolFormatter.cs @@ -9,10 +9,19 @@ namespace Docfx.Dotnet; internal static partial class SymbolFormatter { private static readonly SymbolDisplayFormat s_nameFormat = new( - memberOptions: SymbolDisplayMemberOptions.IncludeParameters | SymbolDisplayMemberOptions.IncludeExplicitInterface, - genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, - parameterOptions: SymbolDisplayParameterOptions.IncludeType, - miscellaneousOptions: SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | SymbolDisplayMiscellaneousOptions.UseSpecialTypes, + memberOptions: + SymbolDisplayMemberOptions.IncludeParameters | + SymbolDisplayMemberOptions.IncludeExplicitInterface, + genericsOptions: + SymbolDisplayGenericsOptions.IncludeTypeParameters, + parameterOptions: + SymbolDisplayParameterOptions.IncludeType, + miscellaneousOptions: + SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | + SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | + (ExtractMetadataConfig.UseClrTypeNames + ? SymbolDisplayMiscellaneousOptions.None + : SymbolDisplayMiscellaneousOptions.UseSpecialTypes), extensionMethodStyle: SymbolDisplayExtensionMethodStyle.StaticMethod); private static readonly SymbolDisplayFormat s_nameWithTypeFormat = s_nameFormat diff --git a/src/Docfx.Dotnet/YamlViewModelExtensions.cs b/src/Docfx.Dotnet/YamlViewModelExtensions.cs index bb91b6fd12e..a07970ad1a5 100644 --- a/src/Docfx.Dotnet/YamlViewModelExtensions.cs +++ b/src/Docfx.Dotnet/YamlViewModelExtensions.cs @@ -271,7 +271,7 @@ public static ItemViewModel ToItemViewModel(this MetadataItem model, ExtractMeta if (model.Parent != null && model.Parent.Name != null && !model.Name.StartsWith(model.Parent.Name)) { - result.Id = model.Name.Substring(model.Name.LastIndexOf(".") + 1); + result.Id = model.Name.Substring(model.Name.LastIndexOf('.') + 1); } else { diff --git a/src/Docfx.Glob/GlobMatcher.cs b/src/Docfx.Glob/GlobMatcher.cs index a9262fbb7d3..5fee9fcaf26 100644 --- a/src/Docfx.Glob/GlobMatcher.cs +++ b/src/Docfx.Glob/GlobMatcher.cs @@ -41,6 +41,7 @@ public class GlobMatcher : IEquatable private readonly GlobRegexItem[][] _items; private readonly bool _negate = false; + private readonly bool _allowDotMatch = false; private readonly bool _ignoreCase = false; #endregion @@ -54,6 +55,7 @@ public GlobMatcher(string pattern, GlobMatcherOptions options = DefaultOptions) Options = options; Raw = pattern; + _allowDotMatch = Options.HasFlag(GlobMatcherOptions.AllowDotMatch); _ignoreCase = Options.HasFlag(GlobMatcherOptions.IgnoreCase); _negate = ParseNegate(ref pattern, Options); _items = Compile(pattern).ToArray(); @@ -68,7 +70,7 @@ public GlobMatcher(string pattern, GlobMatcherOptions options = DefaultOptions) public Regex GetRegex() { var regexParts = _items.Select(ConvertSingleGlob); - var content = string.Join("|", regexParts); + var content = string.Join('|', regexParts); // Matches the entire pattern content = $"^(?:{content})$"; if (_negate) @@ -172,7 +174,7 @@ private GlobRegexItem ConvertSingleGlobPart(string globPart) // .abc will not be matched unless . is explicitly specified if (globPart.Length > 0 && globPart[0] != '.') { - patternStart = Options.HasFlag(GlobMatcherOptions.AllowDotMatch) ? PatternStartWithDotAllowed : PatternStartWithoutDotAllowed; + patternStart = _allowDotMatch ? PatternStartWithDotAllowed : PatternStartWithoutDotAllowed; } for (int i = 0; i < globPart.Length; i++) @@ -223,7 +225,7 @@ private GlobRegexItem ConvertSingleGlobPart(string globPart) else if (c == ']' && !escaping) { // current char class ends when meeting the first non-escaping ] - builder.Append(currentCharClass.ToString()); + builder.Append(currentCharClass); currentCharClass = null; break; } @@ -295,7 +297,7 @@ private string GlobRegexItemToRegex(GlobRegexItem item) { return SingleStarToRegex; } - if (Options.HasFlag(GlobMatcherOptions.AllowDotMatch)) + if (_allowDotMatch) { // ** when dots are allowed, allows anything except .. and . // not (^ or / followed by one or two dots followed by $ or /) @@ -385,7 +387,7 @@ private bool MatchOne(string[] fileParts, GlobRegexItem[] globParts, bool matchP break; case GlobRegexItemType.PlainText: StringComparison comparison = StringComparison.Ordinal; - if (Options.HasFlag(GlobMatcherOptions.IgnoreCase)) + if (_ignoreCase) { comparison = StringComparison.OrdinalIgnoreCase; } @@ -408,7 +410,7 @@ private bool DisallowedMatchExists(string filePart) { if (filePart == "." || filePart == ".." - || (!Options.HasFlag(GlobMatcherOptions.AllowDotMatch) && filePart.StartsWith(".", StringComparison.Ordinal))) + || (!_allowDotMatch && filePart.StartsWith(".", StringComparison.Ordinal))) { return true; } diff --git a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippet.cs b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippet.cs index 2d44531f1bb..0c9063a1ed8 100644 --- a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippet.cs +++ b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippet.cs @@ -113,7 +113,7 @@ public string GetHighlightLinesString() { if (HighlightRanges != null && HighlightRanges.Any()) { - return string.Join(",", HighlightRanges.Select(highlight => + return string.Join(',', HighlightRanges.Select(highlight => { if (highlight.Start == highlight.End) return highlight.Start.ToString(); diff --git a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetParser.cs b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetParser.cs index 1bd846f98ac..b76d91bd4fe 100644 --- a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetParser.cs +++ b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetParser.cs @@ -41,21 +41,21 @@ public override BlockState TryOpen(BlockProcessor processor) { IsNotebookCode = isNotebookCode, }; - MatchLanguage(processor, ref slice, ref codeSnippet); + MatchLanguage(ref slice, ref codeSnippet); - if (!MatchName(processor, ref slice, ref codeSnippet)) + if (!MatchName(ref slice, ref codeSnippet)) { return BlockState.None; } - if (!MatchPath(processor, ref slice, ref codeSnippet)) + if (!MatchPath(ref slice, ref codeSnippet)) { return BlockState.None; } - MatchQuery(processor, ref slice, ref codeSnippet); + MatchQuery(ref slice, ref codeSnippet); - MatchTitle(processor, ref slice, ref codeSnippet); + MatchTitle(ref slice, ref codeSnippet); ExtensionsHelper.SkipWhitespace(ref slice); if (slice.CurrentChar == ')') @@ -85,24 +85,7 @@ public override BlockState TryOpen(BlockProcessor processor) return BlockState.None; } - private static bool MatchStart(ref StringSlice slice) - { - var pc = slice.PeekCharExtra(-1); - if (pc == '\\') return false; - - var c = slice.CurrentChar; - var index = 0; - - while (c != '\0' && index < StartString.Length && char.ToLower(c) == StartString[index]) - { - c = slice.NextChar(); - index++; - } - - return index == StartString.Length; - } - - private static bool MatchLanguage(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchLanguage(ref StringSlice slice, ref CodeSnippet codeSnippet) { if (slice.CurrentChar != '-') return false; @@ -120,7 +103,7 @@ private static bool MatchLanguage(BlockProcessor processor, ref StringSlice slic return true; } - private static bool MatchPath(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchPath(ref StringSlice slice, ref CodeSnippet codeSnippet) { ExtensionsHelper.SkipWhitespace(ref slice); if (slice.CurrentChar != '(') return false; @@ -157,7 +140,7 @@ private static bool MatchPath(BlockProcessor processor, ref StringSlice slice, r return true; } - private static bool MatchName(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchName(ref StringSlice slice, ref CodeSnippet codeSnippet) { if (slice.CurrentChar != '[') return false; @@ -190,16 +173,16 @@ private static bool MatchName(BlockProcessor processor, ref StringSlice slice, r return false; } - private static bool MatchQuery(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchQuery(ref StringSlice slice, ref CodeSnippet codeSnippet) { - var questionMarkMatched = MatchQuestionMarkQuery(processor, ref slice, ref codeSnippet); + var questionMarkMatched = MatchQuestionMarkQuery(ref slice, ref codeSnippet); - var bookMarkMatched = MatchBookMarkQuery(processor, ref slice, ref codeSnippet); + var bookMarkMatched = MatchBookMarkQuery(ref slice, ref codeSnippet); return questionMarkMatched || bookMarkMatched; } - private static bool MatchQuestionMarkQuery(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchQuestionMarkQuery(ref StringSlice slice, ref CodeSnippet codeSnippet) { if (slice.CurrentChar != '?') return false; @@ -218,7 +201,7 @@ private static bool MatchQuestionMarkQuery(BlockProcessor processor, ref StringS return TryParseQuery(queryString, ref codeSnippet); } - private static bool MatchBookMarkQuery(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchBookMarkQuery(ref StringSlice slice, ref CodeSnippet codeSnippet) { if (slice.CurrentChar != '#') return false; @@ -246,7 +229,7 @@ private static bool MatchBookMarkQuery(BlockProcessor processor, ref StringSlice return true; } - private static bool MatchTitle(BlockProcessor processor, ref StringSlice slice, ref CodeSnippet codeSnippet) + private static bool MatchTitle(ref StringSlice slice, ref CodeSnippet codeSnippet) { if (slice.CurrentChar != '"') return false; diff --git a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs index 1ffe6afca98..6a8544d5ef6 100644 --- a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs +++ b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs @@ -210,7 +210,7 @@ public HtmlCodeSnippetRenderer(MarkdownContext context) public static string GetLanguageByFileExtension(string extension) { - return s_languageByFileExtension.TryGetValue(extension, out var result) ? result : null; + return s_languageByFileExtension.GetValueOrDefault(extension); } protected override void Write(HtmlRenderer renderer, CodeSnippet codeSnippet) @@ -240,7 +240,7 @@ private string GetNoteBookContent(string content, string tagName, CodeSnippet ob } catch (JsonReaderException ex) { - _context.LogError("not-notebook-content", "Not a valid Notebook. " + ex.ToString(), obj); + _context.LogError("not-notebook-content", "Not a valid Notebook. " + ex, obj); return string.Empty; } @@ -432,35 +432,6 @@ private static bool IsLineInRange(int lineNumber, List allCodeRanges) return false; } - private static int GetTagLineNumber(string[] lines, string tagLine) - { - for (int index = 0; index < lines.Length; index++) - { - var line = lines[index]; - var targetColumn = 0; - var match = true; - - for (int column = 0; column < line.Length; column++) - { - var c = line[column]; - if (c != ' ') - { - if (targetColumn >= tagLine.Length || tagLine[targetColumn] != char.ToUpper(c)) - { - match = false; - break; - } - - targetColumn++; - } - } - - if (match && targetColumn == tagLine.Length) return index + 1; - } - - return -1; - } - private string GetWarning() { var warningTitle = _context.GetToken(WarningTitleId) ?? DefaultWarningTitle; diff --git a/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs b/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs index ca5b50a93a5..b21f9348a98 100644 --- a/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs +++ b/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs @@ -10,7 +10,7 @@ namespace Docfx.MarkdigEngine.Extensions; public static class ExtensionsHelper { - public static readonly Regex HtmlEscapeWithEncode = new(@"&", RegexOptions.Compiled); + public static readonly Regex HtmlEscapeWithEncode = new("&", RegexOptions.Compiled); public static readonly Regex HtmlEscapeWithoutEncode = new(@"&(?!#?\w+;)", RegexOptions.Compiled); public static readonly Regex HtmlUnescape = new(@"&([#\w]+);", RegexOptions.Compiled); @@ -170,26 +170,6 @@ public static string TryGetStringBeforeChars(IEnumerable chars, ref String } #region private methods - private static string GetAbsolutePathWithTildeCore(string basePath, string tildePath) - { - var index = 1; - var ch = tildePath[index]; - while (ch == '/' || ch == '\\') - { - index++; - ch = tildePath[index]; - } - - if (index == tildePath.Length) - { - return basePath; - } - - var pathWithoutTilde = tildePath.Substring(index); - - return NormalizePath(Path.Combine(basePath, pathWithoutTilde)); - } - private static bool CharEqual(char ch1, char ch2, bool isCaseSensitive) { return isCaseSensitive ? ch1 == ch2 : char.ToLower(ch1) == char.ToLower(ch2); diff --git a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs index 2e7ffb317b2..aee8908e57f 100644 --- a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs +++ b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs @@ -13,7 +13,7 @@ namespace Docfx.MarkdigEngine.Extensions; /// /// Markdig extension setting. /// -[DebuggerDisplay(@"Name = {Name}")] +[DebuggerDisplay("Name = {Name}")] [Newtonsoft.Json.JsonConverter(typeof(MarkdigExtensionSettingConverter))] public class MarkdigExtensionSetting { diff --git a/src/Docfx.MarkdigEngine.Extensions/MarkdownExtensions.cs b/src/Docfx.MarkdigEngine.Extensions/MarkdownExtensions.cs index 253405982cb..1fe3f5e6c62 100644 --- a/src/Docfx.MarkdigEngine.Extensions/MarkdownExtensions.cs +++ b/src/Docfx.MarkdigEngine.Extensions/MarkdownExtensions.cs @@ -79,7 +79,7 @@ public static MarkdownPipelineBuilder UseOptionalExtensions( optionalExtensions = results.ToArray(); // Enable remaining markdig extensions with default options. - pipeline.Configure(string.Join("+", optionalExtensions.Select(x => x.Name))); + pipeline.Configure(string.Join('+', optionalExtensions.Select(x => x.Name))); return pipeline; } diff --git a/src/Docfx.MarkdigEngine.Extensions/TabGroup/ActiveAndVisibleRewriter.cs b/src/Docfx.MarkdigEngine.Extensions/TabGroup/ActiveAndVisibleRewriter.cs index 5f11ef25adf..adce056fc14 100644 --- a/src/Docfx.MarkdigEngine.Extensions/TabGroup/ActiveAndVisibleRewriter.cs +++ b/src/Docfx.MarkdigEngine.Extensions/TabGroup/ActiveAndVisibleRewriter.cs @@ -36,7 +36,7 @@ public IMarkdownObject Rewrite(IMarkdownObject markdownObject) { _context.LogWarning( "invalid-tab-group", - $"Duplicate tab id: {string.Join(",", idAndCountList.Where(g => g.Item2 > 1))}.", + $"Duplicate tab id: {string.Join(',', idAndCountList.Where(g => g.Item2 > 1))}.", block); } var active = GetTabActive(block, tabSelectionInfo, items, firstVisibleTab, idAndCountList); diff --git a/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs b/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs index 7425f77c854..bb6062a9cfa 100644 --- a/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs +++ b/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs @@ -8,6 +8,7 @@ using Markdig; using Markdig.Renderers; using Markdig.Syntax; +using CollectionExtensions = System.Collections.Generic.CollectionExtensions; namespace Docfx.MarkdigEngine; @@ -26,7 +27,7 @@ public MarkdigMarkdownService( _parameters = parameters; _configureMarkdig = configureMarkdig; _context = new MarkdownContext( - key => _parameters.Tokens.TryGetValue(key, out var value) ? value : null, + key => CollectionExtensions.GetValueOrDefault(_parameters.Tokens, key), (code, message, origin, line) => Logger.LogInfo(message, null, InclusionContext.File.ToString(), line?.ToString(), code), (code, message, origin, line) => Logger.LogSuggestion(message, null, InclusionContext.File.ToString(), line?.ToString(), code), (code, message, origin, line) => Logger.LogWarning(message, null, InclusionContext.File.ToString(), line?.ToString(), code), diff --git a/src/Docfx.Plugins/GroupInfo.cs b/src/Docfx.Plugins/GroupInfo.cs index 01fd4ace4d3..f1a2eaea0d5 100644 --- a/src/Docfx.Plugins/GroupInfo.cs +++ b/src/Docfx.Plugins/GroupInfo.cs @@ -9,5 +9,5 @@ public class GroupInfo public string Destination { get; set; } - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Plugins/ManifestGroupInfo.cs b/src/Docfx.Plugins/ManifestGroupInfo.cs index 622237f064f..a5da47d05da 100644 --- a/src/Docfx.Plugins/ManifestGroupInfo.cs +++ b/src/Docfx.Plugins/ManifestGroupInfo.cs @@ -22,7 +22,7 @@ public class ManifestGroupInfo [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); public ManifestGroupInfo(GroupInfo groupInfo) { diff --git a/src/Docfx.Plugins/ManifestItem.cs b/src/Docfx.Plugins/ManifestItem.cs index 347cd23f1ce..c9711556b65 100644 --- a/src/Docfx.Plugins/ManifestItem.cs +++ b/src/Docfx.Plugins/ManifestItem.cs @@ -30,5 +30,5 @@ public class ManifestItem [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Plugins/OutputFileInfo.cs b/src/Docfx.Plugins/OutputFileInfo.cs index 8bab04a17a3..3779d0357e5 100644 --- a/src/Docfx.Plugins/OutputFileInfo.cs +++ b/src/Docfx.Plugins/OutputFileInfo.cs @@ -18,5 +18,5 @@ public class OutputFileInfo [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.Plugins/TreeItem.cs b/src/Docfx.Plugins/TreeItem.cs index 7f0d56d97e8..fa53c634788 100644 --- a/src/Docfx.Plugins/TreeItem.cs +++ b/src/Docfx.Plugins/TreeItem.cs @@ -14,5 +14,5 @@ public class TreeItem [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/src/Docfx.YamlSerialization/Helpers/Regexes.cs b/src/Docfx.YamlSerialization/Helpers/Regexes.cs index 08eb461e4f5..7127542f127 100644 --- a/src/Docfx.YamlSerialization/Helpers/Regexes.cs +++ b/src/Docfx.YamlSerialization/Helpers/Regexes.cs @@ -12,11 +12,11 @@ internal static class Regexes // |true|True|TRUE|false|False|FALSE // |null|Null|NULL|~ // |on|On|ON|off|Off|OFF - public static readonly Regex BooleanLike = new(@"^(true|True|TRUE|false|False|FALSE)$", RegexOptions.Compiled); + public static readonly Regex BooleanLike = new("^(true|True|TRUE|false|False|FALSE)$", RegexOptions.Compiled); - public static readonly Regex NullLike = new(@"^(null|Null|NULL|~)$", RegexOptions.Compiled); + public static readonly Regex NullLike = new("^(null|Null|NULL|~)$", RegexOptions.Compiled); - public static readonly Regex IntegerLike = new(@"^-?(0|[1-9][0-9]*)$", RegexOptions.Compiled); + public static readonly Regex IntegerLike = new("^-?(0|[1-9][0-9]*)$", RegexOptions.Compiled); // https://yaml.org/spec/1.2/spec.html#id2805071 public static readonly Regex FloatLike = new(@"^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$", RegexOptions.Compiled); diff --git a/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs b/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs index 67915766f66..e10c23c5a03 100644 --- a/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs +++ b/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs @@ -67,9 +67,9 @@ private CachingItem() { } public Exception Error { get; private set; } - public List Properties { get; } = new List(); + public List Properties { get; } = new(); - public List ExtensibleProperties { get; } = new List(); + public List ExtensibleProperties { get; } = new(); public static CachingItem Create(Type type) { diff --git a/src/docfx/Models/BuildCommand.cs b/src/docfx/Models/BuildCommand.cs index 1bf2a05e0aa..4dcc87189a3 100644 --- a/src/docfx/Models/BuildCommand.cs +++ b/src/docfx/Models/BuildCommand.cs @@ -34,7 +34,7 @@ internal static void MergeOptionsToConfig(BuildCommandOptions options, BuildJson // base directory for content from command line is current directory // e.g. C:\folder1>docfx build folder2\docfx.json --content "*.cs" // for `--content "*.cs*`, base directory should be `C:\folder1` - string optionsBaseDirectory = Directory.GetCurrentDirectory(); + // hence GetFullPath used below // Override config file with options from command line if (options.Templates != null && options.Templates.Any()) diff --git a/src/docfx/Models/MergeCommand.cs b/src/docfx/Models/MergeCommand.cs index 70fd57e6693..fa5c9624041 100644 --- a/src/docfx/Models/MergeCommand.cs +++ b/src/docfx/Models/MergeCommand.cs @@ -36,8 +36,7 @@ private static void MergeOptionsToConfig(MergeCommandOptions options, ref MergeJ // base directory for content from command line is current directory // e.g. C:\folder1>docfx build folder2\docfx.json --content "*.cs" // for `--content "*.cs*`, base directory should be `C:\folder1` - string optionsBaseDirectory = Directory.GetCurrentDirectory(); - + // hence GetFullPath used if (!string.IsNullOrEmpty(options.OutputFolder)) config.Destination = Path.GetFullPath(Path.Combine(options.OutputFolder, config.Destination ?? string.Empty)); } } diff --git a/templates/package-lock.json b/templates/package-lock.json index fb77a2b7aad..d84f13a8f19 100644 --- a/templates/package-lock.json +++ b/templates/package-lock.json @@ -20,7 +20,7 @@ "anchor-js": "^5.0.0", "bootstrap": "^5.3.3", "bootstrap-icons": "^1.11.3", - "highlight.js": "^11.9.0", + "highlight.js": "^11.10.0", "idb-keyval": "^6.2.1", "jquery": "3.7.0", "lit-html": "^3.1.4", @@ -32,18 +32,18 @@ "devDependencies": { "@types/jest": "^29.5.12", "@types/lunr": "^2.3.7", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/eslint-plugin": "^7.16.0", + "@typescript-eslint/parser": "^7.16.0", "browser-sync": "^3.0.2", - "esbuild": "~0.21.5", + "esbuild": "~0.23.0", "esbuild-sass-plugin": "~3.3.1", "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", "jest": "^29.7.0", "stylelint": "^15.10.3", "stylelint-config-standard-scss": "^11.1.0", - "ts-jest": "^29.1.5", - "typescript": "^5.4.5", + "ts-jest": "^29.2.0", + "typescript": "^5.5.3", "yargs": "^17.7.2" } }, @@ -946,9 +946,9 @@ "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw==" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", "cpu": [ "ppc64" ], @@ -958,13 +958,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "cpu": [ "arm" ], @@ -974,13 +974,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "cpu": [ "arm64" ], @@ -990,13 +990,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "cpu": [ "x64" ], @@ -1006,13 +1006,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "cpu": [ "arm64" ], @@ -1022,13 +1022,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "cpu": [ "x64" ], @@ -1038,13 +1038,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "cpu": [ "arm64" ], @@ -1054,13 +1054,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "cpu": [ "x64" ], @@ -1070,13 +1070,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "cpu": [ "arm" ], @@ -1086,13 +1086,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "cpu": [ "arm64" ], @@ -1102,13 +1102,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "cpu": [ "ia32" ], @@ -1118,13 +1118,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "cpu": [ "loong64" ], @@ -1134,13 +1134,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "cpu": [ "mips64el" ], @@ -1150,13 +1150,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "cpu": [ "ppc64" ], @@ -1166,13 +1166,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "cpu": [ "riscv64" ], @@ -1182,13 +1182,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "cpu": [ "s390x" ], @@ -1198,13 +1198,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "cpu": [ "x64" ], @@ -1214,13 +1214,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", "cpu": [ "x64" ], @@ -1230,13 +1230,29 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "cpu": [ "x64" ], @@ -1246,13 +1262,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "cpu": [ "x64" ], @@ -1262,13 +1278,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "cpu": [ "arm64" ], @@ -1278,13 +1294,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "cpu": [ "ia32" ], @@ -1294,13 +1310,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "cpu": [ "x64" ], @@ -1310,7 +1326,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -2033,9 +2049,9 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, "dependencies": { "@types/node": "*" @@ -2186,16 +2202,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", - "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz", + "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/type-utils": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/type-utils": "7.16.0", + "@typescript-eslint/utils": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2219,15 +2235,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4" }, "engines": { @@ -2270,13 +2286,13 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", + "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2287,13 +2303,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", - "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz", + "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/utils": "7.13.1", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/utils": "7.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2337,9 +2353,9 @@ "dev": true }, "node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", + "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2350,13 +2366,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", + "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2404,9 +2420,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2425,15 +2441,15 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", - "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", + "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1" + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2447,12 +2463,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", + "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.16.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4175,9 +4191,9 @@ } }, "node_modules/engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -4188,23 +4204,23 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", + "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", + "ws": "~8.17.1", "xmlhttprequest-ssl": "~2.0.0" } }, @@ -4225,15 +4241,6 @@ } } }, - "node_modules/engine.io-client/node_modules/engine.io-parser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", - "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/engine.io-client/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4241,18 +4248,18 @@ "dev": true }, "node_modules/engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", "dev": true, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -4373,41 +4380,42 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "node_modules/esbuild-sass-plugin": { @@ -5558,9 +5566,9 @@ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "node_modules/highlight.js": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", - "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", "engines": { "node": ">=12.0.0" } @@ -9421,31 +9429,56 @@ } }, "node_modules/socket.io": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.0.tgz", - "integrity": "sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.0", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, "dependencies": { - "ws": "~8.11.0" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/socket.io-client": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", @@ -10129,9 +10162,9 @@ } }, "node_modules/ts-jest": { - "version": "29.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", - "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.0.tgz", + "integrity": "sha512-eFmkE9MG0+oT6nqSOcUwL+2UUmK2IvhhUV8hFDsCHnc++v2WCCbQQZh5vvjsa8sgOY/g9T0325hmkEmi6rninA==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -10256,9 +10289,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10578,16 +10611,16 @@ } }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -11310,163 +11343,170 @@ "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw==" }, "@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", "dev": true, "optional": true }, "@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "dev": true, "optional": true }, @@ -12043,9 +12083,9 @@ "dev": true }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, "requires": { "@types/node": "*" @@ -12196,16 +12236,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", - "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz", + "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/type-utils": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/type-utils": "7.16.0", + "@typescript-eslint/utils": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -12213,15 +12253,15 @@ } }, "@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4" }, "dependencies": { @@ -12243,23 +12283,23 @@ } }, "@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", + "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0" } }, "@typescript-eslint/type-utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", - "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz", + "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/utils": "7.13.1", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/utils": "7.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -12282,19 +12322,19 @@ } }, "@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", + "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", + "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12322,9 +12362,9 @@ } }, "minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -12339,24 +12379,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", - "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", + "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1" + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", + "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "7.16.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -13606,9 +13646,9 @@ "dev": true }, "engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -13619,14 +13659,14 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "requires": { "ms": "2.1.2" @@ -13641,15 +13681,15 @@ } }, "engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", + "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", "dev": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", + "ws": "~8.17.1", "xmlhttprequest-ssl": "~2.0.0" }, "dependencies": { @@ -13662,12 +13702,6 @@ "ms": "2.1.2" } }, - "engine.io-parser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", - "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -13677,9 +13711,9 @@ } }, "engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", "dev": true }, "error-ex": { @@ -13768,34 +13802,35 @@ } }, "esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "esbuild-sass-plugin": { @@ -14633,9 +14668,9 @@ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "highlight.js": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", - "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==" + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==" }, "hosted-git-info": { "version": "4.1.0", @@ -17283,17 +17318,18 @@ } }, "socket.io": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.0.tgz", - "integrity": "sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.0", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" }, "dependencies": { "debug": { @@ -17314,12 +17350,30 @@ } }, "socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, "requires": { - "ws": "~8.11.0" + "debug": "~4.3.4", + "ws": "~8.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "socket.io-client": { @@ -17818,9 +17872,9 @@ "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" }, "ts-jest": { - "version": "29.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", - "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.0.tgz", + "integrity": "sha512-eFmkE9MG0+oT6nqSOcUwL+2UUmK2IvhhUV8hFDsCHnc++v2WCCbQQZh5vvjsa8sgOY/g9T0325hmkEmi6rninA==", "dev": true, "requires": { "bs-logger": "0.x", @@ -17895,9 +17949,9 @@ } }, "typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true }, "ua-parser-js": { @@ -18123,9 +18177,9 @@ } }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "requires": {} }, diff --git a/templates/package.json b/templates/package.json index 03f38f01132..f0965c517b8 100644 --- a/templates/package.json +++ b/templates/package.json @@ -29,7 +29,7 @@ "anchor-js": "^5.0.0", "bootstrap": "^5.3.3", "bootstrap-icons": "^1.11.3", - "highlight.js": "^11.9.0", + "highlight.js": "^11.10.0", "idb-keyval": "^6.2.1", "jquery": "3.7.0", "lit-html": "^3.1.4", @@ -41,18 +41,18 @@ "devDependencies": { "@types/jest": "^29.5.12", "@types/lunr": "^2.3.7", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/eslint-plugin": "^7.16.0", + "@typescript-eslint/parser": "^7.16.0", "browser-sync": "^3.0.2", - "esbuild": "~0.21.5", + "esbuild": "~0.23.0", "esbuild-sass-plugin": "~3.3.1", "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", "jest": "^29.7.0", "stylelint": "^15.10.3", "stylelint-config-standard-scss": "^11.1.0", - "ts-jest": "^29.1.5", - "typescript": "^5.4.5", + "ts-jest": "^29.2.0", + "typescript": "^5.5.3", "yargs": "^17.7.2" } } diff --git a/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs b/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs index af300d42b1e..2e2aee978c5 100644 --- a/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs +++ b/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs @@ -18,7 +18,6 @@ namespace Docfx.Build.ManagedReference.Tests; public class ManagedReferenceDocumentProcessorTest : TestBase { private readonly string _outputFolder; - private readonly string _inputFolder; private readonly FileCollection _defaultFiles; private readonly ApplyTemplateSettings _applyTemplateSettings; private readonly TemplateManager _templateManager; @@ -29,10 +28,10 @@ public class ManagedReferenceDocumentProcessorTest : TestBase public ManagedReferenceDocumentProcessorTest() { _outputFolder = GetRandomFolder(); - _inputFolder = GetRandomFolder(); + string inputFolder = GetRandomFolder(); _defaultFiles = new FileCollection(Directory.GetCurrentDirectory()); _defaultFiles.Add(DocumentType.Article, new[] { "TestData/mref/CatLibrary.Cat-2.yml" }, "TestData/"); - _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) + _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, diff --git a/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs b/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs index 0ee100e3878..d0aba296e8f 100644 --- a/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs +++ b/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs @@ -224,11 +224,11 @@ public void InvalidOPathsTest2() private static string ExtractDictionaryKeys(Dictionary dict) { - return string.Join(",", dict.Keys.ToArray()); + return string.Join(',', dict.Keys.ToArray()); } private static string ExtractDictionaryKeys(Dictionary dict) { - return string.Join(",", dict.Keys.ToArray()); + return string.Join(',', dict.Keys.ToArray()); } } diff --git a/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs b/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs index 7901c5dd77f..483f0f7e5a2 100644 --- a/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs +++ b/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs @@ -19,7 +19,6 @@ namespace Docfx.Build.RestApi.Tests; public class RestApiDocumentProcessorTest : TestBase { private readonly string _outputFolder; - private readonly string _inputFolder; private readonly FileCollection _defaultFiles; private readonly ApplyTemplateSettings _applyTemplateSettings; @@ -29,10 +28,10 @@ public class RestApiDocumentProcessorTest : TestBase public RestApiDocumentProcessorTest() { _outputFolder = GetRandomFolder(); - _inputFolder = GetRandomFolder(); + string inputFolder = GetRandomFolder(); _defaultFiles = new FileCollection(Directory.GetCurrentDirectory()); _defaultFiles.Add(DocumentType.Article, new[] { "TestData/swagger/contacts.json" }, "TestData/"); - _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) + _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder) { RawModelExportSettings = { Export = true } }; diff --git a/test/Docfx.Build.RestApi.Tests/SwaggerJsonParserTest.cs b/test/Docfx.Build.RestApi.Tests/SwaggerJsonParserTest.cs index a9bbb30c2d3..8444caf7e37 100644 --- a/test/Docfx.Build.RestApi.Tests/SwaggerJsonParserTest.cs +++ b/test/Docfx.Build.RestApi.Tests/SwaggerJsonParserTest.cs @@ -14,7 +14,7 @@ public class SwaggerJsonParserTest [Fact] public void ParseSimpleSwaggerJsonShouldSucceed() { - var swaggerFile = @"TestData/swagger/simple_swagger2.json"; + var swaggerFile = "TestData/swagger/simple_swagger2.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); Assert.Single(swagger.Paths.Values); @@ -34,7 +34,7 @@ public void ParseSimpleSwaggerJsonShouldSucceed() [Fact] public void ParseSwaggerJsonWithReferenceShouldSucceed() { - var swaggerFile = @"TestData/swagger/ref_swagger2.json"; + var swaggerFile = "TestData/swagger/ref_swagger2.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); Assert.Single(swagger.Paths); @@ -72,7 +72,7 @@ public void ParseSwaggerJsonWithReferenceShouldSucceed() [Fact] public void ParseSwaggerJsonWithTagShouldSucceed() { - const string swaggerFile = @"TestData/swagger/tag_swagger2.json"; + const string swaggerFile = "TestData/swagger/tag_swagger2.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); Assert.Equal(3, swagger.Tags.Count); @@ -90,7 +90,7 @@ public void ParseSwaggerJsonWithTagShouldSucceed() [Fact] public void ParseSwaggerJsonWithPathParametersShouldSucceed() { - const string swaggerFile = @"TestData/swagger/pathParameters_swagger2.json"; + const string swaggerFile = "TestData/swagger/pathParameters_swagger2.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); Assert.Single(swagger.Paths.Values); @@ -111,7 +111,7 @@ public void ParseSwaggerJsonWithPathParametersShouldSucceed() [Fact] public void ParseSwaggerJsonWithLoopReferenceShouldSucceed() { - const string swaggerFile = @"TestData/swagger/loopref_swagger2.json"; + const string swaggerFile = "TestData/swagger/loopref_swagger2.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); Assert.Single(swagger.Paths.Values); @@ -150,7 +150,7 @@ public void ParseSwaggerJsonWithLoopReferenceShouldSucceed() [Fact] public void ParseSwaggerJsonWithExternalLoopReferenceShouldSucceed() { - const string swaggerFile = @"TestData/swagger/externalLoopRef_A.json"; + const string swaggerFile = "TestData/swagger/externalLoopRef_A.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); Assert.Single(swagger.Paths.Values); @@ -188,7 +188,7 @@ public void ParseSwaggerJsonWithExternalLoopReferenceShouldSucceed() [Fact] public void ParseKeyWordSwaggerJsonShouldSucceed() { - var swaggerFile = @"TestData/swagger/resolveKeywordWithRefInside.json"; + var swaggerFile = "TestData/swagger/resolveKeywordWithRefInside.json"; var swagger = SwaggerJsonParser.Parse(swaggerFile); ///test x-ms-examples: unresolved. diff --git a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs index eae8e9f6851..1e0dd40bc2e 100644 --- a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs +++ b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs @@ -18,7 +18,6 @@ namespace Docfx.Build.RestApi.WithPlugins.Tests; [Collection("docfx STA")] public class SplitRestApiToOperationLevelTest : TestBase { - private readonly string _inputFolder; private readonly string _outputFolder; private readonly FileCollection _defaultFiles; private readonly ApplyTemplateSettings _applyTemplateSettings; @@ -28,11 +27,11 @@ public class SplitRestApiToOperationLevelTest : TestBase public SplitRestApiToOperationLevelTest() { - _inputFolder = GetRandomFolder(); + string inputFolder = GetRandomFolder(); _outputFolder = GetRandomFolder(); _defaultFiles = new FileCollection(Directory.GetCurrentDirectory()); _defaultFiles.Add(DocumentType.Article, new[] { "TestData/swagger/petstore.json" }, "TestData/"); - _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) + _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, diff --git a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs index c9565824d3a..dd4b1a1604e 100644 --- a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs +++ b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs @@ -19,7 +19,6 @@ namespace Docfx.Build.RestApi.WithPlugins.Tests; [Collection("docfx STA")] public class SplitRestApiToTagLevelTest : TestBase { - private readonly string _inputFolder; private readonly string _outputFolder; private readonly FileCollection _defaultFiles; private readonly ApplyTemplateSettings _applyTemplateSettings; @@ -29,11 +28,11 @@ public class SplitRestApiToTagLevelTest : TestBase public SplitRestApiToTagLevelTest() { - _inputFolder = GetRandomFolder(); + string inputFolder = GetRandomFolder(); _outputFolder = GetRandomFolder(); _defaultFiles = new FileCollection(Directory.GetCurrentDirectory()); _defaultFiles.Add(DocumentType.Article, new[] { "TestData/swagger/petstore.json" }, "TestData/"); - _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) + _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, diff --git a/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs b/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs index 4ff52c3e53b..7a81ebb9fe1 100644 --- a/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs +++ b/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs @@ -14,8 +14,6 @@ public class MergeMarkdownFragmentsTest : TestBase { private readonly string _outputFolder; private readonly string _inputFolder; - private readonly string _templateFolder; - private readonly FileCollection _defaultFiles; private readonly ApplyTemplateSettings _applyTemplateSettings; private readonly TemplateManager _templateManager; private readonly FileCollection _files; @@ -29,17 +27,17 @@ public MergeMarkdownFragmentsTest() { _outputFolder = GetRandomFolder(); _inputFolder = GetRandomFolder(); - _templateFolder = GetRandomFolder(); - _defaultFiles = new FileCollection(Directory.GetCurrentDirectory()); + string templateFolder = GetRandomFolder(); + var defaultFiles = new FileCollection(Directory.GetCurrentDirectory()); _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, }; - _templateManager = new TemplateManager(new List { "template" }, null, _templateFolder); + _templateManager = new TemplateManager(new List { "template" }, null, templateFolder); _rawModelFilePath = GetRawModelFilePath("Suppressions.yml"); - var schemaFile = CreateFile("template/schemas/rest.mixed.schema.json", File.ReadAllText("TestData/schemas/rest.mixed.schema.json"), _templateFolder); + var schemaFile = CreateFile("template/schemas/rest.mixed.schema.json", File.ReadAllText("TestData/schemas/rest.mixed.schema.json"), templateFolder); var yamlFile = CreateFile("Suppressions.yml", File.ReadAllText("TestData/inputs/Suppressions.yml"), _inputFolder); - _files = new FileCollection(_defaultFiles); + _files = new FileCollection(defaultFiles); _files.Add(DocumentType.Article, new[] { yamlFile }, _inputFolder); } @@ -351,7 +349,7 @@ I add a summary. // modify fragments UpdateFile( "Suppressions.yml.md", - new string[] { @"# `management.azure.com.advisor.suppressions`", + new string[] { "# `management.azure.com.advisor.suppressions`", "## ``summary``", "I update a summary.", "With [!include[invalid](invalid.md)]", diff --git a/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs b/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs index 77b1205676f..b17f774dafc 100644 --- a/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs +++ b/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs @@ -19,9 +19,6 @@ namespace Docfx.Build.SchemaDriven.Tests; [Collection("docfx STA")] public class SchemaDrivenProcessorTest : TestBase { - private static readonly Regex InputMatcher = new(@"```(yml|yaml)\s*(### YamlMime:[\s\S]*?)\s*```", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private static readonly Regex SchemaMatcher = new(@"```json\s*(\{\s*""\$schema""[\s\S]*?)\s*```", RegexOptions.Compiled | RegexOptions.IgnoreCase); - private readonly string _outputFolder; private readonly string _inputFolder; private readonly string _templateFolder; @@ -125,7 +122,7 @@ public void TestXrefResolver() // arrange var schemaFile = CreateFile("template/schemas/mref.test.schema.json", File.ReadAllText("TestData/schemas/mref.test.schema.json"), _templateFolder); var templateXref = CreateFile( - "template/partials/overview.tmpl", @"{{name}}:{{{summary}}}|{{#boolProperty}}{{intProperty}}{{/boolProperty}}|{{#monikers}}{{.}}{{/monikers}}", + "template/partials/overview.tmpl", "{{name}}:{{{summary}}}|{{#boolProperty}}{{intProperty}}{{/boolProperty}}|{{#monikers}}{{.}}{{/monikers}}", _templateFolder); var templateFile = CreateFile("template/ManagedReference.html.tmpl", @" {{#items}} @@ -412,11 +409,6 @@ private string GetRawModelFilePath(string fileName) return Path.Combine(_outputFolder, Path.ChangeExtension(fileName, RawModelFileExtension)); } - private string GetOutputFilePath(string fileName) - { - return Path.GetFullPath(Path.Combine(_outputFolder, Path.ChangeExtension(fileName, "html"))); - } - [Export(nameof(SchemaDrivenDocumentProcessor) + ".NotExist", typeof(IDocumentBuildStep))] public class TestBuildStep2 : IDocumentBuildStep { diff --git a/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs b/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs index 62bc20a8f1c..e8f76657d87 100644 --- a/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs +++ b/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs @@ -36,11 +36,11 @@ public void TestSchemaFragmentsIterator() private class UidPropertyCounter : ISchemaFragmentsHandler { - public List ExistingMarkdownProperties { get; private set; } = new List(); + public List ExistingMarkdownProperties { get; private set; } = new(); - public List MissingMarkdownProperties { get; private set; } = new List(); + public List MissingMarkdownProperties { get; private set; } = new(); - public List ExistingUids { get; private set; } = new List(); + public List ExistingUids { get; private set; } = new(); public void HandleUid(string uidKey, YamlMappingNode node, Dictionary fragments, BaseSchema schema, string oPathPrefix, string uid) { diff --git a/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs b/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs index edc3d4f554c..a33b88b301d 100644 --- a/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs +++ b/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs @@ -331,8 +331,8 @@ public void TestSchemaOverwriteWithGeneralSchemaOptions() xref: uid1 reference: ../inc/inc.md ", _inputFolder); - var includeFile = CreateFile("inc/inc.md", @"[parent](../src/src.yml)", _inputFolder); - var includeFile2 = CreateFile("inc/inc2.md", @"[overwrite](../src/src.yml)", _inputFolder); + var includeFile = CreateFile("inc/inc.md", "[parent](../src/src.yml)", _inputFolder); + var includeFile2 = CreateFile("inc/inc2.md", "[overwrite](../src/src.yml)", _inputFolder); var overwriteFile = CreateFile("overwrite/a.md", @"--- uid: uid1 summary: *content diff --git a/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs b/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs index b614834e2cb..51051ed04ca 100644 --- a/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs +++ b/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs @@ -18,7 +18,6 @@ namespace Docfx.Build.ManagedReference.Tests; public class ConceptualDocumentProcessorTest : TestBase { private readonly string _outputFolder; - private readonly string _inputFolder; private readonly string _templateFolder; private readonly FileCollection _defaultFiles; private readonly FileCreator _fileCreator; @@ -29,22 +28,22 @@ public class ConceptualDocumentProcessorTest : TestBase public ConceptualDocumentProcessorTest() { _outputFolder = GetRandomFolder(); - _inputFolder = GetRandomFolder(); + string inputFolder = GetRandomFolder(); _templateFolder = GetRandomFolder(); - _fileCreator = new FileCreator(_inputFolder); - _defaultFiles = new FileCollection(_inputFolder); + _fileCreator = new FileCreator(inputFolder); + _defaultFiles = new FileCollection(inputFolder); - _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) + _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true }; - EnvironmentContext.SetBaseDirectory(_inputFolder); + EnvironmentContext.SetBaseDirectory(inputFolder); EnvironmentContext.SetOutputDirectory(_outputFolder); // Prepare conceptual template var templateCreator = new FileCreator(_templateFolder); - var file = templateCreator.CreateFile(@"{{{conceptual}}}", "conceptual.html.tmpl", "default"); + var file = templateCreator.CreateFile("{{{conceptual}}}", "conceptual.html.tmpl", "default"); _templateManager = new TemplateManager(new List { "default" }, null, _templateFolder); } @@ -370,7 +369,7 @@ Some content // Add template for redirection. var templateCreator = new FileCreator(_templateFolder); - templateCreator.CreateFile(@"{{{redirect_url}}}", "redirection.html.tmpl", "default"); + templateCreator.CreateFile("{{{redirect_url}}}", "redirection.html.tmpl", "default"); // act BuildDocument(files, metadata); diff --git a/test/Docfx.Build.Tests/DocumentBuilderTest.cs b/test/Docfx.Build.Tests/DocumentBuilderTest.cs index ca96868ad35..0b23fdb7ced 100644 --- a/test/Docfx.Build.Tests/DocumentBuilderTest.cs +++ b/test/Docfx.Build.Tests/DocumentBuilderTest.cs @@ -224,7 +224,7 @@ public void TestBuild() $"Test href generator: GitHub", $"Test href generator: Git

", "

", - @"test", + "test", "

"), model["conceptual"]); Assert.Equal( @@ -674,16 +674,11 @@ private class FakeResponseHandler : DelegatingHandler { private readonly Dictionary _fakeResponses = new(); - public void AddFakeResponse(Uri uri, HttpResponseMessage responseMessage) - { - _fakeResponses.Add(uri, responseMessage); - } - protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { - if (_fakeResponses.ContainsKey(request.RequestUri)) + if (_fakeResponses.TryGetValue(request.RequestUri, out HttpResponseMessage response)) { - return Task.FromResult(_fakeResponses[request.RequestUri]); + return Task.FromResult(response); } else { diff --git a/test/Docfx.Build.Tests/DocumentProcessors/YamlDocumentModel.cs b/test/Docfx.Build.Tests/DocumentProcessors/YamlDocumentModel.cs index 9023a51df59..d05c828c08e 100644 --- a/test/Docfx.Build.Tests/DocumentProcessors/YamlDocumentModel.cs +++ b/test/Docfx.Build.Tests/DocumentProcessors/YamlDocumentModel.cs @@ -20,10 +20,10 @@ public class YamlDocumentModel [ExtensibleMember] [Newtonsoft.Json.JsonExtensionData] [System.Text.Json.Serialization.JsonExtensionData] - public Dictionary Data { get; set; } = new Dictionary(); + public Dictionary Data { get; set; } = new(); [YamlMember(Alias = "metadata")] [JsonProperty("metadata")] [JsonPropertyName("metadata")] - public Dictionary Metadata { get; set; } = new Dictionary(); + public Dictionary Metadata { get; set; } = new(); } diff --git a/test/Docfx.Build.Tests/JintProcessorHelperTest.cs b/test/Docfx.Build.Tests/JintProcessorHelperTest.cs index ef66c716c2d..acc518771e1 100644 --- a/test/Docfx.Build.Tests/JintProcessorHelperTest.cs +++ b/test/Docfx.Build.Tests/JintProcessorHelperTest.cs @@ -48,8 +48,8 @@ private sealed class TestData public string ValueB { get; set; } = "ValueB"; - public Dictionary ValueDict { get; set; } = new Dictionary { [1] = "Value1", ["key"] = 2 }; + public Dictionary ValueDict { get; set; } = new() { [1] = "Value1", ["key"] = 2 }; - public List ValueList { get; set; } = new List { "ValueA", "ValueB" }; + public List ValueList { get; set; } = new() { "ValueA", "ValueB" }; } } diff --git a/test/Docfx.Build.Tests/TemplateManagerUnitTest.cs b/test/Docfx.Build.Tests/TemplateManagerUnitTest.cs index 8b0a0d2351a..a97a85ea613 100644 --- a/test/Docfx.Build.Tests/TemplateManagerUnitTest.cs +++ b/test/Docfx.Build.Tests/TemplateManagerUnitTest.cs @@ -439,7 +439,7 @@ public void TestMustacheTemplateWithScriptWithLongStringInModelShouldWork() // https://github.com/sebastienros/jint/issues/357 var templateName = "TemplateFolder.html"; - string defaultTemplate = @"{{name}}"; + string defaultTemplate = "{{name}}"; var name = "this is a looooooooooooooooooooooooooooooooooooog name"; var longName = string.Concat(Enumerable.Repeat(name, 20000)); string script = @" @@ -480,7 +480,7 @@ public void JsRegexShouldNotShareStatusAmongFunctions() // https://github.com/sebastienros/jint/issues/364 var templateName = "TemplateFolder.html"; - string defaultTemplate = @"{{result1}},{{result2}}"; + string defaultTemplate = "{{result1}},{{result2}}"; string script = @" exports.transform = function (model){ var url = 'https://www.example.com'; @@ -518,7 +518,7 @@ function isAbsolutePath(path) { public void JsCreateDateShouldNotThrowError() { var templateName = "TemplateFolder.html"; - string defaultTemplate = @"{{date}}"; + string defaultTemplate = "{{date}}"; string script = @" exports.transform = function (model){ return { @@ -591,14 +591,6 @@ private static void WriteTemplate(string cwd, params Tuple[] fil } } - private static void WriteModel(string path, object model) - { - var dir = Path.GetDirectoryName(path); - if (!string.IsNullOrEmpty(dir)) - Directory.CreateDirectory(dir); - JsonUtility.Serialize(path, model); - } - private static void AssertEqualIgnoreCrlf(string expected, string actual) { Assert.Equal(expected.Replace("\r\n", "\n"), actual.Replace("\r\n", "\n")); diff --git a/test/Docfx.Build.Tests/TemplateProcessorUnitTest.cs b/test/Docfx.Build.Tests/TemplateProcessorUnitTest.cs index e8bb00c503a..afa8b8cfbc1 100644 --- a/test/Docfx.Build.Tests/TemplateProcessorUnitTest.cs +++ b/test/Docfx.Build.Tests/TemplateProcessorUnitTest.cs @@ -26,7 +26,7 @@ public TemplateProcessorUnitTest() [Fact] public void TestXrefWithTemplate() { - CreateFile("partials/xref.html.tmpl", @"

{{uid}}

{{summary}}

{{#isGood}}Good!{{/isGood}}", _templateFolder); + CreateFile("partials/xref.html.tmpl", "

{{uid}}

{{summary}}

{{#isGood}}Good!{{/isGood}}", _templateFolder); CreateFile("index.html.tmpl", @" ", _templateFolder); diff --git a/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs b/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs index df3d1a401a4..c654e1ef350 100644 --- a/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs +++ b/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs @@ -62,7 +62,7 @@ public void ProcessMarkdownTocWithComplexHrefShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Constructor", Href = $"{href}.md", @@ -96,19 +96,19 @@ public void ProcessMarkdownTocWithAbsoluteHrefShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Topic1 Language", Href = "/href1", TopicHref = "/href1", Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1 Language C#", Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1.1", Href = "/href1.1.1", @@ -116,7 +116,7 @@ public void ProcessMarkdownTocWithAbsoluteHrefShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic1.2", Href = string.Empty, @@ -124,7 +124,7 @@ public void ProcessMarkdownTocWithAbsoluteHrefShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic2", Href = "http://href.com", @@ -160,21 +160,21 @@ public void ProcessMarkdownTocWithRelativeHrefShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Topic1", Href = "/href1", TopicHref = "/href1", Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1", Href = file1, TopicHref = file1, Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1.1", Href = file2, @@ -182,7 +182,7 @@ public void ProcessMarkdownTocWithRelativeHrefShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic1.2", Href = string.Empty, @@ -190,13 +190,13 @@ public void ProcessMarkdownTocWithRelativeHrefShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic2", Href = "http://href.com", TopicHref = "http://href.com" }, - new TocItemViewModel + new() { Name = "Topic3", Href = "invalid.md", @@ -240,21 +240,21 @@ public void ProcessYamlTocWithFolderShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Topic1", Href = file1, TopicHref = file1, Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1", Href = file1, // For relative file, href keeps unchanged Homepage = file2, // Homepage always keeps unchanged TopicHref = file2, }, - new TocItemViewModel + new() { Name = "Topic1.2", Href = file1, // For relative folder, href should be overwritten by homepage @@ -264,7 +264,7 @@ public void ProcessYamlTocWithFolderShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic2", Href = file2, @@ -310,14 +310,14 @@ public void ProcessYamlTocWithMetadataShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Topic1", Href = file1, TopicHref = file1, Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1", Href = file1, // For relative file, href keeps unchanged @@ -379,14 +379,14 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Topic1", Href = file1, TopicHref = file1, Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1", IncludedFrom = "~/sub1/toc.md", @@ -394,25 +394,25 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() TopicHref = null, Items = new List { - new TocItemViewModel + new() { Name = "Topic", Href = file2, TopicHref = file2, }, - new TocItemViewModel + new() { Name = "ReferencedToc", IncludedFrom = "~/sub1/sub2/toc.yml", Items = new List { - new TocItemViewModel + new() { Name = "Topic", Href = file3, TopicHref = file3, }, - new TocItemViewModel + new() { Name = "NotExistTopic", Href = "sub1/sub2/a/b/c.md", @@ -421,13 +421,13 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() } }, - new TocItemViewModel + new() { Name = "ReferencedToc2", IncludedFrom = "~/sub1/sub3/toc.md", Items = new List { - new TocItemViewModel + new() { Name = "Not-existed-md", Href = "sub1/sub3/sub2/notexist.md", @@ -435,7 +435,7 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() }, } }, - new TocItemViewModel + new() { Name = "Not-existed-md", Href = "sub1/sub2/notexist.md", @@ -443,7 +443,7 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic1.2", Href = file1, // For referenced toc, href should be overwritten by homepage @@ -452,25 +452,25 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() Homepage = file1, Items = new List { - new TocItemViewModel + new() { Name = "Topic", Href = file2, TopicHref = file2, }, - new TocItemViewModel + new() { Name = "ReferencedToc", IncludedFrom = "~/sub1/sub2/toc.yml", Items = new List { - new TocItemViewModel + new() { Name = "Topic", Href = file3, TopicHref = file3, }, - new TocItemViewModel + new() { Name = "NotExistTopic", Href = "sub1/sub2/a/b/c.md", @@ -478,13 +478,13 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "ReferencedToc2", IncludedFrom = "~/sub1/sub3/toc.md", Items = new List { - new TocItemViewModel + new() { Name = "Not-existed-md", Href = "sub1/sub3/sub2/notexist.md", @@ -492,7 +492,7 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Not-existed-md", Href = "sub1/sub2/notexist.md", @@ -502,20 +502,20 @@ public void ProcessYamlTocWithReferencedTocShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic2", IncludedFrom = "~/sub1/sub2/toc.yml", Href = null, Items = new List { - new TocItemViewModel + new() { Name = "Topic", Href = file3, TopicHref = file3, }, - new TocItemViewModel + new() { Name = "NotExistTopic", Href = "sub1/sub2/a/b/c.md", @@ -638,7 +638,7 @@ public void ProcessYamlTocWithTocHrefShouldSucceed() { Items = new List { - new TocItemViewModel + new() { Name = "Topic1", Href = "/Topic1/", @@ -647,7 +647,7 @@ public void ProcessYamlTocWithTocHrefShouldSucceed() TopicHref = "/Topic1/index.html", Items = new List { - new TocItemViewModel + new() { Name = "Topic1.1", Href = "/Topic1.1/", @@ -655,7 +655,7 @@ public void ProcessYamlTocWithTocHrefShouldSucceed() Homepage = "/Topic1.1/index.html", TopicHref = "/Topic1.1/index.html", }, - new TocItemViewModel + new() { Name = "Topic1.2", Href = "/Topic1.2/", @@ -665,7 +665,7 @@ public void ProcessYamlTocWithTocHrefShouldSucceed() } } }, - new TocItemViewModel + new() { Name = "Topic2", TocHref = referencedToc, @@ -846,7 +846,7 @@ public void UrlDecodeHrefInYamlToc() public void UrlDecodeHrefInMarkdownToc() { // Arrange - var tocContent = @"# [NAME](a%20b.md)"; + var tocContent = "# [NAME](a%20b.md)"; var files = new FileCollection(_inputFolder); var tocFile = _fileCreator.CreateFile(tocContent, FileType.MarkdownToc); var markdownFile = _fileCreator.CreateFile(string.Empty, FileType.MarkdownContent, fileNameWithoutExtension: "a b"); diff --git a/test/Docfx.Build.Tests/ValidateBookmarkTest.cs b/test/Docfx.Build.Tests/ValidateBookmarkTest.cs index d4cb2d3e931..24cc7edf5de 100644 --- a/test/Docfx.Build.Tests/ValidateBookmarkTest.cs +++ b/test/Docfx.Build.Tests/ValidateBookmarkTest.cs @@ -48,13 +48,13 @@ public void TestBasicFeature() } }; - File.WriteAllText(Path.Combine(_outputFolder, "a.html"), @"Microsoft Bing

section

"); - File.WriteAllText(Path.Combine(_outputFolder, "b.html"), @"bookmark existedlink with source info link in token filelink without source info"); - File.WriteAllText(Path.Combine(_outputFolder, "c.html"), @"Test illegal link path"); - File.WriteAllText(Path.Combine(_outputFolder, "d.html"), @"Test illegal link path with wildchar *"); - File.WriteAllText(Path.Combine(_outputFolder, "e.html"), @"Test illegal link path with wildchar ?"); - File.WriteAllText(Path.Combine(_outputFolder, "Dir/f.html"), @"Test local link"); - File.WriteAllText(Path.Combine(_outputFolder, "g.html"), @"local link in token file"); + File.WriteAllText(Path.Combine(_outputFolder, "a.html"), "Microsoft Bing

section

"); + File.WriteAllText(Path.Combine(_outputFolder, "b.html"), "bookmark existedlink with source info link in token filelink without source info"); + File.WriteAllText(Path.Combine(_outputFolder, "c.html"), "Test illegal link path"); + File.WriteAllText(Path.Combine(_outputFolder, "d.html"), "Test illegal link path with wildchar *"); + File.WriteAllText(Path.Combine(_outputFolder, "e.html"), "Test illegal link path with wildchar ?"); + File.WriteAllText(Path.Combine(_outputFolder, "Dir/f.html"), "Test local link"); + File.WriteAllText(Path.Combine(_outputFolder, "g.html"), "local link in token file"); File.WriteAllText(Path.Combine(_outputFolder, "h.html"), @"

Test if raw title can be loaded as bookmark from metadata of manifest item

"); Logger.RegisterListener(_listener); @@ -74,11 +74,11 @@ public void TestBasicFeature() Assert.True(logs.All(l => l.Code == WarningCodes.Build.InvalidBookmark)); var expected = new[] { - Tuple.Create(@"Invalid link: '[link with source info](a.md#b2)'. The file a.md doesn't contain a bookmark named 'b2'.", "b.md"), - Tuple.Create(@"Invalid link: '[link in token file](a.md#b3)'. The file a.md doesn't contain a bookmark named 'b3'.", "token.md"), + Tuple.Create("Invalid link: '[link with source info](a.md#b2)'. The file a.md doesn't contain a bookmark named 'b2'.", "b.md"), + Tuple.Create("Invalid link: '[link in token file](a.md#b3)'. The file a.md doesn't contain a bookmark named 'b3'.", "token.md"), Tuple.Create(@"Invalid link: 'link without source info'. The file a.md doesn't contain a bookmark named 'b4'.", "b.md"), Tuple.Create(@"Invalid link: 'Test local link'. The file f.md doesn't contain a bookmark named 'b1'.", "f.md"), - Tuple.Create(@"Invalid link: '[local link in token file](#b3)'. The file g.md doesn't contain a bookmark named 'b3'.", "token.md"), + Tuple.Create("Invalid link: '[local link in token file](#b3)'. The file g.md doesn't contain a bookmark named 'b3'.", "token.md"), }; var actual = logs.Select(l => Tuple.Create(l.Message, l.File)).ToList(); Assert.True(!expected.Except(actual).Any() && expected.Length == actual.Count); @@ -97,8 +97,8 @@ public void TestNoCheck() new ManifestItem { SourceRelativePath = "testNoCheckBookmark.md", Output = { { ".html", new OutputFileInfo { RelativePath = "testNoCheckBookmark.html" } } } }, } }; - File.WriteAllText(Path.Combine(_outputFolder, "test.html"), @"test"); - File.WriteAllText(Path.Combine(_outputFolder, "testNoCheckBookmark.html"), @"test"); + File.WriteAllText(Path.Combine(_outputFolder, "test.html"), "test"); + File.WriteAllText(Path.Combine(_outputFolder, "testNoCheckBookmark.html"), "test"); // Act Logger.RegisterListener(_listener); diff --git a/test/Docfx.Build.Tests/XRefMapSerializationTest.cs b/test/Docfx.Build.Tests/XRefMapSerializationTest.cs index b36348bfb36..6925b4234f0 100644 --- a/test/Docfx.Build.Tests/XRefMapSerializationTest.cs +++ b/test/Docfx.Build.Tests/XRefMapSerializationTest.cs @@ -21,7 +21,7 @@ public void XRefMapSerializationRoundTripTest() HrefUpdated = null, Redirections = new List { - new XRefMapRedirection + new() { Href = "Dummy", UidPrefix = "Dummy" @@ -29,7 +29,7 @@ public void XRefMapSerializationRoundTripTest() }, References = new List { - new XRefSpec(new Dictionary + new(new Dictionary { ["Additional1"] = "Dummy", }) diff --git a/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs b/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs index cc39b0ea0a7..2ec94eb53f6 100644 --- a/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs +++ b/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs @@ -15,7 +15,6 @@ namespace Docfx.Build.UniversalReference.Tests; public class UniversalReferenceDocumentProcessorTest : TestBase { private readonly string _outputFolder; - private readonly string _inputFolder; private readonly ApplyTemplateSettings _applyTemplateSettings; private readonly TemplateManager _templateManager; @@ -29,8 +28,8 @@ public class UniversalReferenceDocumentProcessorTest : TestBase public UniversalReferenceDocumentProcessorTest() { _outputFolder = GetRandomFolder(); - _inputFolder = GetRandomFolder(); - _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) + string inputFolder = GetRandomFolder(); + _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, diff --git a/test/Docfx.Common.Tests/CompositeDictionaryTest.cs b/test/Docfx.Common.Tests/CompositeDictionaryTest.cs index 843c2290bec..2bbe7ee86b0 100644 --- a/test/Docfx.Common.Tests/CompositeDictionaryTest.cs +++ b/test/Docfx.Common.Tests/CompositeDictionaryTest.cs @@ -105,9 +105,9 @@ public void TestThrowCaseForCompositeDictionary() private sealed class C { - public Dictionary D1 { get; } = new Dictionary(); - public SortedDictionary D2 { get; } = new SortedDictionary(); - public SortedList D3 { get; } = new SortedList(); + public Dictionary D1 { get; } = new(); + public SortedDictionary D2 { get; } = new(); + public SortedList D3 { get; } = new(); private CompositeDictionary _cd; public CompositeDictionary CD { diff --git a/test/Docfx.Common.Tests/PathUtilityTest.cs b/test/Docfx.Common.Tests/PathUtilityTest.cs index 17a6f05c8fe..aaceedef989 100644 --- a/test/Docfx.Common.Tests/PathUtilityTest.cs +++ b/test/Docfx.Common.Tests/PathUtilityTest.cs @@ -38,12 +38,12 @@ private static class TestData { public static TheoryData AdditionalTests = new() { - { @"/a/b/d", @"/a/b/file.md", @"../file.md"}, // root relative path - { @"~/a/b/d", @"~/a/b/file.md", @"../file.md"}, // user home directory relative path - { @"./", @"\\UNCPath\file.md", @"//UNCPath/file.md"}, // UNC path - { @"./", @"file:///C:/temp/test.md", @"file:/C:/temp/test.md"}, // `file:` Uri path - { @"file:///C:/temp", @"file:///C:/temp/test.md", @"test.md"}, // `file:` Uri relative path - { @"/temp/dir", @"/temp/dir/subdir/", @"subdir/"}, // If target path endsWith directory separator char. resolved path should contain directory separator. + { "/a/b/d", "/a/b/file.md", "../file.md"}, // root relative path + { "~/a/b/d", "~/a/b/file.md", "../file.md"}, // user home directory relative path + { "./", @"\\UNCPath\file.md", "//UNCPath/file.md"}, // UNC path + { "./", "file:///C:/temp/test.md", "file:/C:/temp/test.md"}, // `file:` Uri path + { "file:///C:/temp", "file:///C:/temp/test.md", "test.md"}, // `file:` Uri relative path + { "/temp/dir", "/temp/dir/subdir/", "subdir/"}, // If target path endsWith directory separator char. resolved path should contain directory separator. }; public static TheoryData EscapedPaths = new() diff --git a/test/Docfx.Common.Tests/YamlSerializationTest.cs b/test/Docfx.Common.Tests/YamlSerializationTest.cs index 925e49c8bbd..a2b1315ffce 100644 --- a/test/Docfx.Common.Tests/YamlSerializationTest.cs +++ b/test/Docfx.Common.Tests/YamlSerializationTest.cs @@ -325,11 +325,11 @@ public void TestListOfClassWithExtensibleMembers() public class ClassWithExtensibleMembers : BasicClass { [ExtensibleMember("s.")] - public SortedDictionary StringExtensions { get; } = new SortedDictionary(); + public SortedDictionary StringExtensions { get; } = new(); [ExtensibleMember("i.")] - public SortedList IntegerExtensions { get; } = new SortedList(); + public SortedList IntegerExtensions { get; } = new(); [ExtensibleMember()] - public Dictionary ObjectExtensions { get; } = new Dictionary(); + public Dictionary ObjectExtensions { get; } = new(); } [Fact] diff --git a/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs b/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs index 3f266d5453f..5ea684af187 100644 --- a/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs +++ b/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs @@ -133,7 +133,7 @@ public sealed class Class1 where T : struct, IEnumerable Assert.Equal("Class1", type.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Class1", type.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Class1`1", type.Name); - Assert.Equal(@"public sealed class Class1 where T : struct, IEnumerable", type.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public sealed class Class1 where T : struct, IEnumerable", type.Syntax.Content[SyntaxLanguage.CSharp]); Assert.NotNull(type.Syntax.TypeParameters); Assert.Single(type.Syntax.TypeParameters); Assert.Equal("T", type.Syntax.TypeParameters[0].Name); @@ -173,7 +173,7 @@ public sealed class Class1 where T : struct, IEnumerable var returnValue = property.Syntax.Return; Assert.NotNull(returnValue.Type); Assert.Equal("System.Collections.Generic.IEnumerable{{T}}", returnValue.Type); - Assert.Equal(@"public IEnumerable Items { get; set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public IEnumerable Items { get; set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } { var event1 = output.Items[0].Items[0].Items[2]; @@ -219,7 +219,7 @@ public sealed class Class1 where T : struct, IEnumerable var returnValue = property.Syntax.Return; Assert.NotNull(returnValue.Type); Assert.Equal("System.Collections.Generic.IEnumerable{{T}}", returnValue.Type); - Assert.Equal(@"public IEnumerable Items2 { get; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public IEnumerable Items2 { get; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } // check references { @@ -679,7 +679,7 @@ namespace Test1 Assert.Equal("FooBar", type.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.FooBar", type.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.FooBar", type.Name); - Assert.Equal(@"public delegate void FooBar(ref int x, out string y, in bool z, params byte[] w)", type.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate void FooBar(ref int x, out string y, in bool z, params byte[] w)", type.Syntax.Content[SyntaxLanguage.CSharp]); Assert.NotNull(type.Syntax.Parameters); Assert.Equal(4, type.Syntax.Parameters.Count); @@ -700,7 +700,7 @@ namespace Test1 Assert.Equal("Ref", type.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Ref", type.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Ref", type.Name); - Assert.Equal(@"public delegate ref int Ref()", type.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate ref int Ref()", type.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Null(type.Syntax.Parameters); Assert.Equal("System.Int32", type.Syntax.Return.Type); @@ -712,7 +712,7 @@ namespace Test1 Assert.Equal("RefReadonly", type.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.RefReadonly", type.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.RefReadonly", type.Name); - Assert.Equal(@"public delegate ref readonly int RefReadonly()", type.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate ref readonly int RefReadonly()", type.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Null(type.Syntax.Parameters); Assert.Equal("System.Int32", type.Syntax.Return.Type); @@ -923,7 +923,7 @@ T Bar(TArg[] x) Assert.Equal("Foo", type.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo", type.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1", type.Name); - Assert.Equal(@"public class Foo : IFoo, IFoo, IFoo where T : class", type.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public class Foo : IFoo, IFoo, IFoo where T : class", type.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Contains("Test1.IFoo", type.Implements); Assert.Contains("Test1.IFoo{System.String}", type.Implements); Assert.Contains("Test1.IFoo{{T}}", type.Implements); @@ -936,7 +936,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.Bar(ref int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.Bar(ref int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo#Bar(System.Int32@)", method.Name); - Assert.Equal(@"object IFoo.Bar(ref int x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("object IFoo.Bar(ref int x)", method.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo.Bar(System.Int32@)", method.Implements[0]); } { @@ -947,7 +947,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.Bar(TArg[])", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.Bar(TArg[])", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo{System#String}#Bar``1(``0[])", method.Name); - Assert.Equal(@"string IFoo.Bar(TArg[] x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("string IFoo.Bar(TArg[] x)", method.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo{System.String}.Bar``1({TArg}[])", method.Implements[0]); } { @@ -958,7 +958,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.Bar(TArg[])", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.Bar(TArg[])", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo{T}#Bar``1(``0[])", method.Name); - Assert.Equal(@"T IFoo.Bar(TArg[] x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("T IFoo.Bar(TArg[] x)", method.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo{{T}}.Bar``1({TArg}[])", method.Implements[0]); } { @@ -969,7 +969,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.P", p.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.P", p.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo{System#String}#P", p.Name); - Assert.Equal(@"string IFoo.P { get; set; }", p.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("string IFoo.P { get; set; }", p.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo{System.String}.P", p.Implements[0]); } { @@ -980,7 +980,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.P", p.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.P", p.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo{T}#P", p.Name); - Assert.Equal(@"T IFoo.P { get; set; }", p.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("T IFoo.P { get; set; }", p.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo{{T}}.P", p.Implements[0]); } { @@ -991,7 +991,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.this[string]", p.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.this[string]", p.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo{System#String}#Item(System.String)", p.Name); - Assert.Equal(@"int IFoo.this[string x] { get; }", p.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int IFoo.this[string x] { get; }", p.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo{System.String}.Item(System.String)", p.Implements[0]); } { @@ -1002,7 +1002,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.this[T]", p.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.this[T]", p.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo{T}#Item(`0)", p.Name); - Assert.Equal(@"int IFoo.this[T x] { get; }", p.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int IFoo.this[T x] { get; }", p.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo{{T}}.Item({T})", p.Implements[0]); } { @@ -1013,7 +1013,7 @@ T Bar(TArg[] x) Assert.Equal("Foo.IFoo.E", e.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.Test1.IFoo.E", e.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Test1#IFoo#E", e.Name); - Assert.Equal(@"event EventHandler IFoo.E", e.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("event EventHandler IFoo.E", e.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFoo.E", e.Implements[0]); } } @@ -1238,7 +1238,7 @@ public class Foo Assert.Equal("Foo.operator +(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator +(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_UnaryPlus(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator +(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator +(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[1]; @@ -1247,7 +1247,7 @@ public class Foo Assert.Equal("Foo.operator -(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator -(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_UnaryNegation(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator -(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator -(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[2]; @@ -1256,7 +1256,7 @@ public class Foo Assert.Equal("Foo.operator !(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator !(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_LogicalNot(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator !(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator !(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[3]; @@ -1265,7 +1265,7 @@ public class Foo Assert.Equal("Foo.operator ~(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator ~(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_OnesComplement(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator ~(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator ~(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[4]; @@ -1274,7 +1274,7 @@ public class Foo Assert.Equal("Foo.operator ++(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator ++(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Increment(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator ++(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator ++(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[5]; @@ -1283,7 +1283,7 @@ public class Foo Assert.Equal("Foo.operator --(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator --(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Decrement(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator --(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator --(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[6]; @@ -1292,7 +1292,7 @@ public class Foo Assert.Equal("Foo.operator true(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator true(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_True(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator true(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator true(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[7]; @@ -1301,7 +1301,7 @@ public class Foo Assert.Equal("Foo.operator false(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator false(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_False(Test1.Foo)", method.Name); - Assert.Equal(@"public static Foo operator false(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator false(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } // binary { @@ -1311,7 +1311,7 @@ public class Foo Assert.Equal("Foo.operator +(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator +(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Addition(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator +(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator +(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[9]; @@ -1320,7 +1320,7 @@ public class Foo Assert.Equal("Foo.operator -(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator -(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Subtraction(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator -(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator -(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[10]; @@ -1329,7 +1329,7 @@ public class Foo Assert.Equal("Foo.operator *(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator *(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Multiply(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator *(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator *(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[11]; @@ -1338,7 +1338,7 @@ public class Foo Assert.Equal("Foo.operator /(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator /(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Division(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator /(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator /(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[12]; @@ -1347,7 +1347,7 @@ public class Foo Assert.Equal("Foo.operator %(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator %(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Modulus(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator %(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator %(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[13]; @@ -1356,7 +1356,7 @@ public class Foo Assert.Equal("Foo.operator &(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator &(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_BitwiseAnd(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator &(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator &(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[14]; @@ -1365,7 +1365,7 @@ public class Foo Assert.Equal("Foo.operator |(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator |(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_BitwiseOr(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator |(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator |(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[15]; @@ -1374,7 +1374,7 @@ public class Foo Assert.Equal("Foo.operator ^(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator ^(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_ExclusiveOr(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator ^(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator ^(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[16]; @@ -1383,7 +1383,7 @@ public class Foo Assert.Equal("Foo.operator >>(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator >>(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_RightShift(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator >>(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator >>(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[17]; @@ -1392,7 +1392,7 @@ public class Foo Assert.Equal("Foo.operator <<(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator <<(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_LeftShift(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static Foo operator <<(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static Foo operator <<(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } // comparison { @@ -1402,7 +1402,7 @@ public class Foo Assert.Equal("Foo.operator ==(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator ==(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Equality(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static bool operator ==(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static bool operator ==(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[19]; @@ -1411,7 +1411,7 @@ public class Foo Assert.Equal("Foo.operator !=(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator !=(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Inequality(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static bool operator !=(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static bool operator !=(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[20]; @@ -1420,7 +1420,7 @@ public class Foo Assert.Equal("Foo.operator >(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator >(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_GreaterThan(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static bool operator >(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static bool operator >(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[21]; @@ -1429,7 +1429,7 @@ public class Foo Assert.Equal("Foo.operator <(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator <(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_LessThan(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static bool operator <(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static bool operator <(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[22]; @@ -1438,7 +1438,7 @@ public class Foo Assert.Equal("Foo.operator >=(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator >=(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_GreaterThanOrEqual(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static bool operator >=(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static bool operator >=(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[23]; @@ -1447,7 +1447,7 @@ public class Foo Assert.Equal("Foo.operator <=(Foo, int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.operator <=(Test1.Foo, int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_LessThanOrEqual(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"public static bool operator <=(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static bool operator <=(Foo x, int y)", method.Syntax.Content[SyntaxLanguage.CSharp]); } // conversion { @@ -1457,7 +1457,7 @@ public class Foo Assert.Equal("Foo.implicit operator Foo(int)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.implicit operator Test1.Foo(int)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Implicit(System.Int32)~Test1.Foo", method.Name); - Assert.Equal(@"public static implicit operator Foo(int x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static implicit operator Foo(int x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } { var method = output.Items[0].Items[0].Items[25]; @@ -1466,7 +1466,7 @@ public class Foo Assert.Equal("Foo.explicit operator int(Foo)", method.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.explicit operator int(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.op_Explicit(Test1.Foo)~System.Int32", method.Name); - Assert.Equal(@"public static explicit operator int(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public static explicit operator int(Foo x)", method.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -1617,7 +1617,7 @@ public enum Bar Assert.Equal("Bar.Blue", field.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.Blue", field.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.Blue", field.Name); - Assert.Equal(@"Blue = 2", field.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("Blue = 2", field.Syntax.Content[SyntaxLanguage.CSharp]); } { var field = output.Items[0].Items[1].Items[3]; @@ -1635,7 +1635,7 @@ public enum Bar Assert.Equal("Bar.White", field.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.White", field.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.White", field.Name); - Assert.Equal(@"White = 7", field.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("White = 7", field.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -1795,7 +1795,7 @@ public interface IFooBar Assert.Equal("Foo.A", a.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.A", a.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.A", a.Name); - Assert.Equal(@"public int A { get; set; }", a.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public int A { get; set; }", a.Syntax.Content[SyntaxLanguage.CSharp]); } { var b = output.Items[0].Items[0].Items[1]; @@ -1804,7 +1804,7 @@ public interface IFooBar Assert.Equal("Foo.B", b.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.B", b.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.B", b.Name); - Assert.Equal(@"public virtual int B { get; }", b.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public virtual int B { get; }", b.Syntax.Content[SyntaxLanguage.CSharp]); } { var c = output.Items[0].Items[0].Items[2]; @@ -1813,7 +1813,7 @@ public interface IFooBar Assert.Equal("Foo.C", c.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.C", c.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.C", c.Name); - Assert.Equal(@"public abstract int C { set; }", c.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public abstract int C { set; }", c.Syntax.Content[SyntaxLanguage.CSharp]); } { var d = output.Items[0].Items[0].Items[3]; @@ -1822,7 +1822,7 @@ public interface IFooBar Assert.Equal("Foo.D", d.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.D", d.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.D", d.Name); - Assert.Equal(@"protected int D { get; }", d.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("protected int D { get; }", d.Syntax.Content[SyntaxLanguage.CSharp]); } { var e = output.Items[0].Items[0].Items[4]; @@ -1831,7 +1831,7 @@ public interface IFooBar Assert.Equal("Foo.E", e.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.E", e.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.E", e.Name); - Assert.Equal(@"public T E { get; protected set; }", e.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public T E { get; protected set; }", e.Syntax.Content[SyntaxLanguage.CSharp]); } { var f = output.Items[0].Items[0].Items[5]; @@ -1840,7 +1840,7 @@ public interface IFooBar Assert.Equal("Foo.F", f.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.F", f.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.F", f.Name); - Assert.Equal(@"protected static int F { get; set; }", f.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("protected static int F { get; set; }", f.Syntax.Content[SyntaxLanguage.CSharp]); } { var g = output.Items[0].Items[0].Items[6]; @@ -1849,7 +1849,7 @@ public interface IFooBar Assert.Equal("Foo.G", g.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.G", g.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.G", g.Name); - Assert.Equal(@"public ref int G { get; }", g.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public ref int G { get; }", g.Syntax.Content[SyntaxLanguage.CSharp]); } { var h = output.Items[0].Items[0].Items[7]; @@ -1858,7 +1858,7 @@ public interface IFooBar Assert.Equal("Foo.H", h.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.H", h.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.H", h.Name); - Assert.Equal(@"public ref readonly int H { get; }", h.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public ref readonly int H { get; }", h.Syntax.Content[SyntaxLanguage.CSharp]); } { var a = output.Items[0].Items[1].Items[0]; @@ -1867,7 +1867,7 @@ public interface IFooBar Assert.Equal("Bar.A", a.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.A", a.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.A", a.Name); - Assert.Equal(@"public virtual int A { get; set; }", a.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public virtual int A { get; set; }", a.Syntax.Content[SyntaxLanguage.CSharp]); } { var b = output.Items[0].Items[1].Items[1]; @@ -1876,7 +1876,7 @@ public interface IFooBar Assert.Equal("Bar.B", b.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.B", b.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.B", b.Name); - Assert.Equal(@"public override int B { get; }", b.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public override int B { get; }", b.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo{System.String}.B", b.Overridden); } { @@ -1886,7 +1886,7 @@ public interface IFooBar Assert.Equal("Bar.C", c.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.C", c.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.C", c.Name); - Assert.Equal(@"public override sealed int C { set; }", c.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public override sealed int C { set; }", c.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo{System.String}.C", c.Overridden); } { @@ -1896,7 +1896,7 @@ public interface IFooBar Assert.Equal("IFooBar.A", a.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.A", a.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.A", a.Name); - Assert.Equal(@"int A { get; set; }", a.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int A { get; set; }", a.Syntax.Content[SyntaxLanguage.CSharp]); } { var b = output.Items[0].Items[2].Items[1]; @@ -1905,7 +1905,7 @@ public interface IFooBar Assert.Equal("IFooBar.B", b.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.B", b.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.B", b.Name); - Assert.Equal(@"int B { get; }", b.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int B { get; }", b.Syntax.Content[SyntaxLanguage.CSharp]); } { var c = output.Items[0].Items[2].Items[2]; @@ -1914,7 +1914,7 @@ public interface IFooBar Assert.Equal("IFooBar.C", c.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.C", c.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.C", c.Name); - Assert.Equal(@"int C { set; }", c.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int C { set; }", c.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -1959,7 +1959,7 @@ public interface IFooBar Assert.Equal("Foo.this[int]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[int]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Item(System.Int32)", indexer.Name); - Assert.Equal(@"public int this[int x] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public int this[int x] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[0].Items[1]; @@ -1968,7 +1968,7 @@ public interface IFooBar Assert.Equal("Foo.this[string]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[string]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Item(System.String)", indexer.Name); - Assert.Equal(@"public virtual int this[string x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public virtual int this[string x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[0].Items[2]; @@ -1977,7 +1977,7 @@ public interface IFooBar Assert.Equal("Foo.this[object]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[object]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Item(System.Object)", indexer.Name); - Assert.Equal(@"public abstract int this[object x] { set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public abstract int this[object x] { set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[0].Items[3]; @@ -1986,7 +1986,7 @@ public interface IFooBar Assert.Equal("Foo.this[DateTime]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[System.DateTime]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Item(System.DateTime)", indexer.Name); - Assert.Equal(@"protected int this[DateTime x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("protected int this[DateTime x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[0].Items[4]; @@ -1995,7 +1995,7 @@ public interface IFooBar Assert.Equal("Foo.this[T]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[T]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Item(`0)", indexer.Name); - Assert.Equal(@"public int this[T t] { get; protected set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public int this[T t] { get; protected set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[0].Items[5]; @@ -2004,7 +2004,7 @@ public interface IFooBar Assert.Equal("Foo.this[int, T]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[int, T]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo`1.Item(System.Int32,`0)", indexer.Name); - Assert.Equal(@"protected int this[int x, T t] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("protected int this[int x, T t] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } // Bar { @@ -2014,7 +2014,7 @@ public interface IFooBar Assert.Equal("Bar.this[int]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.this[int]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.Item(System.Int32)", indexer.Name); - Assert.Equal(@"public virtual int this[int x] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public virtual int this[int x] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.Item(System.Int32)", indexer.Implements[0]); } { @@ -2024,7 +2024,7 @@ public interface IFooBar Assert.Equal("Bar.this[string]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.this[string]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.Item(System.String)", indexer.Name); - Assert.Equal(@"public override int this[string x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public override int this[string x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo{System.String}.Item(System.String)", indexer.Overridden); Assert.Equal("Test1.IFooBar.Item(System.String)", indexer.Implements[0]); } @@ -2035,7 +2035,7 @@ public interface IFooBar Assert.Equal("Bar.this[object]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.this[object]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Bar.Item(System.Object)", indexer.Name); - Assert.Equal(@"public override sealed int this[object x] { set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public override sealed int this[object x] { set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo{System.String}.Item(System.Object)", indexer.Overridden); Assert.Equal("Test1.IFooBar.Item(System.Object)", indexer.Implements[0]); } @@ -2047,7 +2047,7 @@ public interface IFooBar Assert.Equal("IFooBar.this[int]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.this[int]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.Item(System.Int32)", indexer.Name); - Assert.Equal(@"int this[int x] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int this[int x] { get; set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[2].Items[1]; @@ -2056,7 +2056,7 @@ public interface IFooBar Assert.Equal("IFooBar.this[string]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.this[string]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.Item(System.String)", indexer.Name); - Assert.Equal(@"int this[string x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int this[string x] { get; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } { var indexer = output.Items[0].Items[2].Items[2]; @@ -2065,7 +2065,7 @@ public interface IFooBar Assert.Equal("IFooBar.this[object]", indexer.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.this[object]", indexer.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.IFooBar.Item(System.Object)", indexer.Name); - Assert.Equal(@"int this[object x] { set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("int this[object x] { set; }", indexer.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -2321,8 +2321,8 @@ public abstract class Foo Assert.Equal("Test1.Foo.P", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.P", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.P", method.Name); - Assert.Equal(@"public dynamic P { get; protected set; }", method.Syntax.Content[SyntaxLanguage.CSharp]); - Assert.Equal(@"Public Property P As Object", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("public dynamic P { get; protected set; }", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("Public Property P As Object", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[3]; @@ -2334,9 +2334,9 @@ public abstract class Foo Assert.Equal("Test1.Foo.this[dynamic]", method.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.Foo.this[](Object)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.Item(System.Object)", method.Name); - Assert.Equal(@"public dynamic this[dynamic index] { get; }", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public dynamic this[dynamic index] { get; }", method.Syntax.Content[SyntaxLanguage.CSharp]); // TODO: https://github.com/dotnet/roslyn/issues/14684 - Assert.Equal(@"Public ReadOnly Default Property this[](index As Object) As Object", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public ReadOnly Default Property this[](index As Object) As Object", method.Syntax.Content[SyntaxLanguage.VB]); } } @@ -2365,8 +2365,8 @@ public static class Foo Assert.Single(type.Inheritance); Assert.Equal("System.Object", type.Inheritance[0]); - Assert.Equal(@"public static class Foo", type.Syntax.Content[SyntaxLanguage.CSharp]); - Assert.Equal(@"Public Module Foo", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("public static class Foo", type.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("Public Module Foo", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -2550,11 +2550,11 @@ public void Undefined(AttributeTargets targets = (AttributeTargets)0) { } var defined = output.Items[0].Items[0].Items[0]; Assert.NotNull(defined); - Assert.Equal(@"public void Defined(Base64FormattingOptions options = Base64FormattingOptions.None)", defined.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void Defined(Base64FormattingOptions options = Base64FormattingOptions.None)", defined.Syntax.Content[SyntaxLanguage.CSharp]); var undefined = output.Items[0].Items[0].Items[1]; Assert.NotNull(undefined); - Assert.Equal(@"public void Undefined(AttributeTargets targets = (AttributeTargets)0)", undefined.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void Undefined(AttributeTargets targets = (AttributeTargets)0)", undefined.Syntax.Content[SyntaxLanguage.CSharp]); } [Fact] @@ -2576,15 +2576,15 @@ public void Undefined(ConsoleKey key = ConsoleKey.None) { } var defined = output.Items[0].Items[0].Items[0]; Assert.NotNull(defined); - Assert.Equal(@"public void Defined(ConsoleSpecialKey key = ConsoleSpecialKey.ControlC)", defined.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void Defined(ConsoleSpecialKey key = ConsoleSpecialKey.ControlC)", defined.Syntax.Content[SyntaxLanguage.CSharp]); var undefined = output.Items[0].Items[0].Items[1]; Assert.NotNull(undefined); #if NET8_0_OR_GREATER - Assert.Equal(@"public void Undefined(ConsoleKey key = ConsoleKey.None)", undefined.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void Undefined(ConsoleKey key = ConsoleKey.None)", undefined.Syntax.Content[SyntaxLanguage.CSharp]); #else - Assert.Equal(@"public void Undefined(ConsoleKey key = default)", undefined.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void Undefined(ConsoleKey key = default)", undefined.Syntax.Content[SyntaxLanguage.CSharp]); #endif } @@ -2608,15 +2608,15 @@ public void PrimitiveValue(int? i = 123) { } var primitiveNull = output.Items[0].Items[0].Items[0]; Assert.NotNull(primitiveNull); - Assert.Equal(@"public void PrimitiveNull(int? i = null)", primitiveNull.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void PrimitiveNull(int? i = null)", primitiveNull.Syntax.Content[SyntaxLanguage.CSharp]); var primitiveDefault = output.Items[0].Items[0].Items[1]; Assert.NotNull(primitiveDefault); - Assert.Equal(@"public void PrimitiveDefault(int? i = 0)", primitiveDefault.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void PrimitiveDefault(int? i = 0)", primitiveDefault.Syntax.Content[SyntaxLanguage.CSharp]); var primitiveValue = output.Items[0].Items[0].Items[2]; Assert.NotNull(primitiveValue); - Assert.Equal(@"public void PrimitiveValue(int? i = 123)", primitiveValue.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void PrimitiveValue(int? i = 123)", primitiveValue.Syntax.Content[SyntaxLanguage.CSharp]); } [Fact] @@ -2641,27 +2641,27 @@ public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999) { } var flagsNull = output.Items[0].Items[0].Items[0]; Assert.NotNull(flagsNull); - Assert.Equal(@"public void EnumNull(ConsoleSpecialKey? key = null)", flagsNull.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void EnumNull(ConsoleSpecialKey? key = null)", flagsNull.Syntax.Content[SyntaxLanguage.CSharp]); var flagsDefault = output.Items[0].Items[0].Items[1]; Assert.NotNull(flagsDefault); - Assert.Equal(@"public void EnumDefault(ConsoleSpecialKey? key = ConsoleSpecialKey.ControlC)", flagsDefault.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void EnumDefault(ConsoleSpecialKey? key = ConsoleSpecialKey.ControlC)", flagsDefault.Syntax.Content[SyntaxLanguage.CSharp]); var flagsValue = output.Items[0].Items[0].Items[2]; Assert.NotNull(flagsValue); - Assert.Equal(@"public void EnumValue(ConsoleSpecialKey? key = ConsoleSpecialKey.ControlBreak)", flagsValue.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void EnumValue(ConsoleSpecialKey? key = ConsoleSpecialKey.ControlBreak)", flagsValue.Syntax.Content[SyntaxLanguage.CSharp]); var enumUndefinedDefault = output.Items[0].Items[0].Items[3]; Assert.NotNull(enumUndefinedDefault); #if NET8_0_OR_GREATER - Assert.Equal(@"public void EnumUndefinedDefault(ConsoleKey? key = ConsoleKey.None)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void EnumUndefinedDefault(ConsoleKey? key = ConsoleKey.None)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]); #else - Assert.Equal(@"public void EnumUndefinedDefault(ConsoleKey? key = null)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void EnumUndefinedDefault(ConsoleKey? key = null)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]); #endif var enumUndefinedValue = output.Items[0].Items[0].Items[4]; Assert.NotNull(enumUndefinedValue); - Assert.Equal(@"public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999)", enumUndefinedValue.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999)", enumUndefinedValue.Syntax.Content[SyntaxLanguage.CSharp]); } [Fact] @@ -2686,23 +2686,23 @@ public void FlagsUndefinedValue(AttributeTargets? targets = (AttributeTargets)65 var enumNull = output.Items[0].Items[0].Items[0]; Assert.NotNull(enumNull); - Assert.Equal(@"public void FlagsNull(Base64FormattingOptions? options = null)", enumNull.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void FlagsNull(Base64FormattingOptions? options = null)", enumNull.Syntax.Content[SyntaxLanguage.CSharp]); var enumDefault = output.Items[0].Items[0].Items[1]; Assert.NotNull(enumDefault); - Assert.Equal(@"public void FlagsDefault(Base64FormattingOptions? options = Base64FormattingOptions.None)", enumDefault.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void FlagsDefault(Base64FormattingOptions? options = Base64FormattingOptions.None)", enumDefault.Syntax.Content[SyntaxLanguage.CSharp]); var enumValue = output.Items[0].Items[0].Items[2]; Assert.NotNull(enumValue); - Assert.Equal(@"public void FlagsValue(Base64FormattingOptions? options = Base64FormattingOptions.InsertLineBreaks)", enumValue.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void FlagsValue(Base64FormattingOptions? options = Base64FormattingOptions.InsertLineBreaks)", enumValue.Syntax.Content[SyntaxLanguage.CSharp]); var flagsUndefinedDefault = output.Items[0].Items[0].Items[3]; Assert.NotNull(flagsUndefinedDefault); - Assert.Equal(@"public void FlagsUndefinedDefault(AttributeTargets? targets = (AttributeTargets)0)", flagsUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void FlagsUndefinedDefault(AttributeTargets? targets = (AttributeTargets)0)", flagsUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]); var flagsUndefinedValue = output.Items[0].Items[0].Items[4]; Assert.NotNull(flagsUndefinedValue); - Assert.Equal(@"public void FlagsUndefinedValue(AttributeTargets? targets = (AttributeTargets)65536)", flagsUndefinedValue.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void FlagsUndefinedValue(AttributeTargets? targets = (AttributeTargets)65536)", flagsUndefinedValue.Syntax.Content[SyntaxLanguage.CSharp]); } [Fact] @@ -2728,11 +2728,11 @@ public void Uint([Optional][DefaultParameterValue(0)]uint i) { } Assert.Collection( output.Items[0].Items[0].Items, - item => Assert.Equal(@"public void Double(double i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), - item => Assert.Equal(@"public void Float(float i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), - item => Assert.Equal(@"public void Decimal(decimal i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), - item => Assert.Equal(@"public void Long(long i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), - item => Assert.Equal(@"public void Uint(uint i = default)", item.Syntax.Content[SyntaxLanguage.CSharp])); + item => Assert.Equal("public void Double(double i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), + item => Assert.Equal("public void Float(float i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), + item => Assert.Equal("public void Decimal(decimal i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), + item => Assert.Equal("public void Long(long i = 0)", item.Syntax.Content[SyntaxLanguage.CSharp]), + item => Assert.Equal("public void Uint(uint i = default)", item.Syntax.Content[SyntaxLanguage.CSharp])); } [Fact] @@ -2752,7 +2752,7 @@ public class Foo { var field = output.Items[0].Items[0].Items[0]; Assert.NotNull(field); - Assert.Equal(@"public const ushort Test = 123", field.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public const ushort Test = 123", field.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -2775,7 +2775,7 @@ public class Foo var field = output.Items[0].Items[0].Items[0]; Assert.NotNull(field); Assert.Equal(@"public const char Test = '\udbff'", field.Syntax.Content[SyntaxLanguage.CSharp]); - Assert.Equal(@"Public Const Test As Char = ChrW(&HDBFF)", field.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Const Test As Char = ChrW(&HDBFF)", field.Syntax.Content[SyntaxLanguage.VB]); } } @@ -2800,8 +2800,8 @@ public static void Method1(this object obj) {} var method = ns.Items[0].Items[0]; Assert.NotNull(method); Assert.True(method.IsExtensionMethod); - Assert.Equal(@"public static void Method1(this object obj)", method.Syntax.Content[SyntaxLanguage.CSharp]); - Assert.Equal(@"Public Shared Sub Method1(obj As Object)", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("public static void Method1(this object obj)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("Public Shared Sub Method1(obj As Object)", method.Syntax.Content[SyntaxLanguage.VB]); } [Fact] @@ -3130,7 +3130,7 @@ private static Assembly CreateAssemblyFromCSharpCode(string code, string assembl result = compilation.Emit(stream); } - Assert.True(result.Success, string.Join(",", result.Diagnostics.Select(s => s.GetMessage()))); + Assert.True(result.Success, string.Join(',', result.Diagnostics.Select(s => s.GetMessage()))); return Assembly.LoadFile(Path.GetFullPath(assemblyName)); } @@ -3157,7 +3157,7 @@ public void Test( { var method = output.Items[0].Items[0].Items[0]; Assert.NotNull(method); - Assert.Equal(@"public void Test(IntPtr a, UIntPtr b, nint c, nuint d, nint e = -1, nuint f = 1)", method.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public void Test(IntPtr a, UIntPtr b, nint c, nuint d, nint e = -1, nuint f = 1)", method.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3185,31 +3185,31 @@ public class Foo { var fnptr = output.Items[0].Items[0].Items[0]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[1]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[2]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[3]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[4]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[5]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[6]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3237,31 +3237,31 @@ public class Foo { var fnptr = output.Items[0].Items[0].Items[0]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[1]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[2]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[3]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[4]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[5]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[6]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3289,31 +3289,31 @@ public class Foo { var fnptr = output.Items[0].Items[0].Items[0]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[1]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[2]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[3]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[4]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[5]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[6]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3341,31 +3341,31 @@ public class Foo { var fnptr = output.Items[0].Items[0].Items[0]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[1]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[2]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[3]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[4]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[5]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[6]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall] g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall] g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3393,31 +3393,31 @@ public class Foo { var fnptr = output.Items[0].Items[0].Items[0]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[1]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[2]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[3]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[4]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] e", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[5]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] f", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[6]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate* unmanaged[Stdcall, Thiscall] g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate* unmanaged[Stdcall, Thiscall] g", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3442,19 +3442,19 @@ public class Foo { var fnptr = output.Items[0].Items[0].Items[0]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate*> a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate*> a", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[1]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate*> b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate*> b", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[2]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate*> c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate*> c", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); fnptr = output.Items[0].Items[0].Items[3]; Assert.NotNull(fnptr); - Assert.Equal(@"public delegate*> d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public delegate*> d", fnptr.Syntax.Content[SyntaxLanguage.CSharp]); } } @@ -3470,11 +3470,11 @@ public struct S public readonly void M() {} public readonly int P1 { get => throw null; set => throw null; } - + public readonly int P2 { get => throw null; } - + public readonly int P3 { set => throw null; } - + public int P4 { readonly get => throw null; set => throw null; } public int P5 { get => throw null; readonly set => throw null; } @@ -3499,7 +3499,7 @@ public readonly void M() {} Assert.Equal("S.P1", property.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P1", property.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P1", property.Name); - Assert.Equal(@"public readonly int P1 { get; set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public readonly int P1 { get; set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } { var property = output.Items[0].Items[0].Items[2]; @@ -3508,7 +3508,7 @@ public readonly void M() {} Assert.Equal("S.P2", property.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P2", property.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P2", property.Name); - Assert.Equal(@"public readonly int P2 { get; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public readonly int P2 { get; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } { var property = output.Items[0].Items[0].Items[3]; @@ -3517,7 +3517,7 @@ public readonly void M() {} Assert.Equal("S.P3", property.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P3", property.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P3", property.Name); - Assert.Equal(@"public readonly int P3 { set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public readonly int P3 { set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } { var property = output.Items[0].Items[0].Items[4]; @@ -3526,7 +3526,7 @@ public readonly void M() {} Assert.Equal("S.P4", property.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P4", property.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P4", property.Name); - Assert.Equal(@"public int P4 { readonly get; set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public int P4 { readonly get; set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } { var property = output.Items[0].Items[0].Items[5]; @@ -3535,7 +3535,7 @@ public readonly void M() {} Assert.Equal("S.P5", property.DisplayNamesWithType[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P5", property.DisplayQualifiedNames[SyntaxLanguage.CSharp]); Assert.Equal("Test1.S.P5", property.Name); - Assert.Equal(@"public int P5 { get; readonly set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); + Assert.Equal("public int P5 { get; readonly set; }", property.Syntax.Content[SyntaxLanguage.CSharp]); } } diff --git a/test/Docfx.Dotnet.Tests/GenerateMetadataFromVBUnitTest.cs b/test/Docfx.Dotnet.Tests/GenerateMetadataFromVBUnitTest.cs index ea798501ca4..502a6144ca7 100644 --- a/test/Docfx.Dotnet.Tests/GenerateMetadataFromVBUnitTest.cs +++ b/test/Docfx.Dotnet.Tests/GenerateMetadataFromVBUnitTest.cs @@ -45,7 +45,7 @@ End Namespace Assert.Equal("Class1", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class1", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class1", type.Name); - Assert.Equal(@"Public Class Class1", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Class Class1", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[1]; @@ -53,7 +53,7 @@ End Namespace Assert.Equal("Class2(Of T)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class2(Of T)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class2`1", type.Name); - Assert.Equal(@"Public Class Class2(Of T) Inherits List(Of T) Implements IList(Of T), ICollection(Of T), IReadOnlyList(Of T), IReadOnlyCollection(Of T), IEnumerable(Of T), IList, ICollection, IEnumerable", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Class Class2(Of T) Inherits List(Of T) Implements IList(Of T), ICollection(Of T), IReadOnlyList(Of T), IReadOnlyCollection(Of T), IEnumerable(Of T), IList, ICollection, IEnumerable", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[2]; @@ -61,7 +61,7 @@ End Namespace Assert.Equal("Class3(Of T1, T2)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class3(Of T1, T2)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class3`2", type.Name); - Assert.Equal(@"Public Class Class3(Of T1, T2 As T1)", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Class Class3(Of T1, T2 As T1)", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[3]; @@ -69,7 +69,7 @@ End Namespace Assert.Equal("Class4(Of T1, T2)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class4(Of T1, T2)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Class4`2", type.Name); - Assert.Equal(@"Public Class Class4(Of T1 As {Structure, IEnumerable(Of T2)}, T2 As {Class, New})", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Class Class4(Of T1 As {Structure, IEnumerable(Of T2)}, T2 As {Class, New})", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -94,7 +94,7 @@ End Namespace Assert.Equal("Enum1", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Enum1", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Enum1", type.Name); - Assert.Equal(@"Public Enum Enum1", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Enum Enum1", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[1]; @@ -102,7 +102,7 @@ End Namespace Assert.Equal("Enum2", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Enum2", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Enum2", type.Name); - Assert.Equal(@"Public Enum Enum2 As Byte", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Enum Enum2 As Byte", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[2]; @@ -110,7 +110,7 @@ End Namespace Assert.Equal("Enum3", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Enum3", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Enum3", type.Name); - Assert.Equal(@"Public Enum Enum3", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Enum Enum3", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -137,7 +137,7 @@ End Namespace Assert.Equal("IA", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.IA", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.IA", type.Name); - Assert.Equal(@"Public Interface IA", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Interface IA", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[1]; @@ -145,7 +145,7 @@ End Namespace Assert.Equal("IB(Of T)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.IB(Of T)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.IB`1", type.Name); - Assert.Equal(@"Public Interface IB(Of T As Class)", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Interface IB(Of T As Class)", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[2]; @@ -153,7 +153,7 @@ End Namespace Assert.Equal("IC(Of TItem)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.IC(Of TItem)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.IC`1", type.Name); - Assert.Equal(@"Public Interface IC(Of TItem As {IA, New}) Inherits IA, IB(Of TItem())", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Interface IC(Of TItem As {IA, New}) Inherits IA, IB(Of TItem())", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -184,7 +184,7 @@ End Namespace Assert.Equal("S1", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.S1", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.S1", type.Name); - Assert.Equal(@"Public Structure S1", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Structure S1", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[1]; @@ -192,7 +192,7 @@ End Namespace Assert.Equal("S2(Of T)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.S2(Of T)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.S2`1", type.Name); - Assert.Equal(@"Public Structure S2(Of T As Class)", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Structure S2(Of T As Class)", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[2]; @@ -200,7 +200,7 @@ End Namespace Assert.Equal("S3(Of T1, T2)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.S3(Of T1, T2)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.S3`2", type.Name); - Assert.Equal(@"Public Structure S3(Of T1 As {Class, IA, New}, T2 As IB(Of T1)) Implements IA, IB(Of T1())", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Structure S3(Of T1 As {Class, IA, New}, T2 As IB(Of T1)) Implements IA, IB(Of T1())", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -298,7 +298,7 @@ End Namespace Assert.Equal("D1", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.D1", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.D1", type.Name); - Assert.Equal(@"Public Delegate Sub D1()", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Delegate Sub D1()", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[1]; @@ -306,7 +306,7 @@ End Namespace Assert.Equal("D2(Of T)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.D2(Of T)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.D2`1", type.Name); - Assert.Equal(@"Public Delegate Sub D2(Of T As Class)(x As Integer())", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Delegate Sub D2(Of T As Class)(x As Integer())", type.Syntax.Content[SyntaxLanguage.VB]); } { var type = output.Items[0].Items[2]; @@ -314,7 +314,7 @@ End Namespace Assert.Equal("D3(Of T1, T2)", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.D3(Of T1, T2)", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.D3`2", type.Name); - Assert.Equal(@"Public Delegate Function D3(Of T1 As Class, T2 As {T1, New})(ByRef x As T1) As T2", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Delegate Function D3(Of T1 As Class, T2 As {T1, New})(ByRef x As T1) As T2", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -335,7 +335,7 @@ End Namespace Assert.Equal("M1", type.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.M1", type.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.M1", type.Name); - Assert.Equal(@"Public Module M1", type.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Module M1", type.Syntax.Content[SyntaxLanguage.VB]); } } @@ -587,7 +587,7 @@ End Namespace Assert.Equal("+(Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.+(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_UnaryPlus(Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator +(x As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator +(x As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[1]; @@ -595,7 +595,7 @@ End Namespace Assert.Equal("-(Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.-(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_UnaryNegation(Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator -(x As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator -(x As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[2]; @@ -603,7 +603,7 @@ End Namespace Assert.Equal("Not(Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.Not(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_OnesComplement(Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator Not(x As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator Not(x As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[3]; @@ -611,7 +611,7 @@ End Namespace Assert.Equal("IsTrue(Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.IsTrue(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_True(Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator IsTrue(x As Foo) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator IsTrue(x As Foo) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[4]; @@ -619,7 +619,7 @@ End Namespace Assert.Equal("IsFalse(Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.IsFalse(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_False(Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator IsFalse(x As Foo) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator IsFalse(x As Foo) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } // binary { @@ -628,7 +628,7 @@ End Namespace Assert.Equal("+(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.+(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Addition(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator +(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator +(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[6]; @@ -636,7 +636,7 @@ End Namespace Assert.Equal("-(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.-(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Subtraction(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator -(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator -(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[7]; @@ -644,7 +644,7 @@ End Namespace Assert.Equal("*(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.*(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Multiply(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator *(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator *(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[8]; @@ -652,7 +652,7 @@ End Namespace Assert.Equal("/(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo./(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Division(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator /(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator /(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[9]; @@ -660,7 +660,7 @@ End Namespace Assert.Equal("Mod(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.Mod(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Modulus(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator Mod(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator Mod(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[10]; @@ -668,7 +668,7 @@ End Namespace Assert.Equal("And(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.And(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_BitwiseAnd(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator And(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator And(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[11]; @@ -676,7 +676,7 @@ End Namespace Assert.Equal("Or(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.Or(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_BitwiseOr(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator Or(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator Or(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[12]; @@ -684,7 +684,7 @@ End Namespace Assert.Equal("Xor(Foo, Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.Xor(Test1.Foo, Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_ExclusiveOr(Test1.Foo,Test1.Foo)", method.Name); - Assert.Equal(@"Public Shared Operator Xor(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator Xor(x As Foo, y As Foo) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[13]; @@ -692,7 +692,7 @@ End Namespace Assert.Equal(">>(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.>>(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_RightShift(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator >>(x As Foo, y As Integer) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator >>(x As Foo, y As Integer) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[14]; @@ -700,7 +700,7 @@ End Namespace Assert.Equal("<<(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.<<(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_LeftShift(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator <<(x As Foo, y As Integer) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator <<(x As Foo, y As Integer) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } // comparison { @@ -709,7 +709,7 @@ End Namespace Assert.Equal("=(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.=(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Equality(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator =(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator =(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[16]; @@ -717,7 +717,7 @@ End Namespace Assert.Equal("<>(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.<>(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Inequality(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator <>(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator <>(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[17]; @@ -725,7 +725,7 @@ End Namespace Assert.Equal(">(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.>(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_GreaterThan(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator >(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator >(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[18]; @@ -733,7 +733,7 @@ End Namespace Assert.Equal("<(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.<(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_LessThan(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator <(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator <(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[19]; @@ -741,7 +741,7 @@ End Namespace Assert.Equal(">=(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.>=(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_GreaterThanOrEqual(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator >=(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator >=(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[20]; @@ -749,7 +749,7 @@ End Namespace Assert.Equal("<=(Foo, Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.<=(Test1.Foo, Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_LessThanOrEqual(Test1.Foo,System.Int32)", method.Name); - Assert.Equal(@"Public Shared Operator <=(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Operator <=(x As Foo, y As Integer) As Boolean", method.Syntax.Content[SyntaxLanguage.VB]); } // conversion { @@ -758,7 +758,7 @@ End Namespace Assert.Equal("CType(Integer)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.CType(Integer)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Implicit(System.Int32)~Test1.Foo", method.Name); - Assert.Equal(@"Public Shared Widening Operator CType(x As Integer) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Widening Operator CType(x As Integer) As Foo", method.Syntax.Content[SyntaxLanguage.VB]); } { var method = output.Items[0].Items[0].Items[22]; @@ -766,7 +766,7 @@ End Namespace Assert.Equal("CType(Foo)", method.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.CType(Test1.Foo)", method.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo.op_Explicit(Test1.Foo)~System.Int32", method.Name); - Assert.Equal(@"Public Shared Narrowing Operator CType(x As Foo) As Integer", method.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Shared Narrowing Operator CType(x As Foo) As Integer", method.Syntax.Content[SyntaxLanguage.VB]); } } @@ -888,7 +888,7 @@ End Namespace Assert.Equal("Blue", field.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Bar.Blue", field.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Bar.Blue", field.Name); - Assert.Equal(@"Blue = 2", field.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Blue = 2", field.Syntax.Content[SyntaxLanguage.VB]); } { var field = output.Items[0].Items[1].Items[3]; @@ -904,7 +904,7 @@ End Namespace Assert.Equal("White", field.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Bar.White", field.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Bar.White", field.Name); - Assert.Equal(@"White = 7", field.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("White = 7", field.Syntax.Content[SyntaxLanguage.VB]); } } @@ -1058,7 +1058,7 @@ End Namespace Assert.Equal("D", d.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo(Of T).D", d.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo`1.D", d.Name); - Assert.Equal(@"Protected Property D As Integer", d.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Protected Property D As Integer", d.Syntax.Content[SyntaxLanguage.VB]); } { var e = output.Items[0].Items[0].Items[4]; @@ -1066,7 +1066,7 @@ End Namespace Assert.Equal("E", e.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo(Of T).E", e.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo`1.E", e.Name); - Assert.Equal(@"Public Property E As T", e.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Property E As T", e.Syntax.Content[SyntaxLanguage.VB]); } { var f = output.Items[0].Items[0].Items[5]; @@ -1074,7 +1074,7 @@ End Namespace Assert.Equal("F", f.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo(Of T).F", f.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo`1.F", f.Name); - Assert.Equal(@"Protected Shared Property F As Integer", f.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Protected Shared Property F As Integer", f.Syntax.Content[SyntaxLanguage.VB]); } // Bar { @@ -1230,7 +1230,7 @@ End Namespace Assert.Equal("D(Date)", d.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo(Of T).D(Date)", d.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo`1.D(System.DateTime)", d.Name); - Assert.Equal(@"Protected Property D(x As Date) As Integer", d.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Protected Property D(x As Date) As Integer", d.Syntax.Content[SyntaxLanguage.VB]); } { var e = output.Items[0].Items[0].Items[4]; @@ -1238,7 +1238,7 @@ End Namespace Assert.Equal("E(T)", e.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo(Of T).E(T)", e.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo`1.E(`0)", e.Name); - Assert.Equal(@"Public Property E(t As T) As Integer", e.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Public Property E(t As T) As Integer", e.Syntax.Content[SyntaxLanguage.VB]); } { var f = output.Items[0].Items[0].Items[5]; @@ -1246,7 +1246,7 @@ End Namespace Assert.Equal("F(Integer, T)", f.DisplayNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo(Of T).F(Integer, T)", f.DisplayQualifiedNames[SyntaxLanguage.VB]); Assert.Equal("Test1.Foo`1.F(System.Int32,`0)", f.Name); - Assert.Equal(@"Protected Shared Property F(x As Integer, t As T) As Integer", f.Syntax.Content[SyntaxLanguage.VB]); + Assert.Equal("Protected Shared Property F(x As Integer, t As T) As Integer", f.Syntax.Content[SyntaxLanguage.VB]); } // Bar { diff --git a/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs b/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs index 37524281fb0..0a2035f3daf 100644 --- a/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs +++ b/test/Docfx.Dotnet.Tests/XmlCommentUnitTest.cs @@ -486,7 +486,7 @@ public void SeeAltText() [Fact] public void ParseXmlCommentWithoutRootNode() { - var input = @"A"; + var input = "A"; var commentModel = XmlComment.Parse(input, new XmlCommentParserContext()); Assert.Equal("A", commentModel.Summary); } diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/AggregatorTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/AggregatorTest.cs index 59852e6d989..f1493d29427 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/AggregatorTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/AggregatorTest.cs @@ -13,7 +13,7 @@ public class AggregatorTest { [Theory] [InlineData( -@"# Test", +"# Test", @"

Test

")] [InlineData( diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/ChromelessFormsTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/ChromelessFormsTest.cs index 927e087ac86..dd724f8008b 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/ChromelessFormsTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/ChromelessFormsTest.cs @@ -52,7 +52,7 @@ public void ChromelessFormsAttributeEndQuotationsRequired() [Fact] public void ChromelessFormsAttributeValueRequired() { - var content = @"::: form submitText :::"; + var content = "::: form submitText :::"; TestUtility.VerifyMarkup(content, null, ["invalid-form"]); } diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/CodeSnippetTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/CodeSnippetTest.cs index 9d86a798909..c9918f38e13 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/CodeSnippetTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/CodeSnippetTest.cs @@ -10,7 +10,7 @@ public class CodeSnippetTest [Fact] public void CodeSnippetNotFound() { - var source = @"[!code-csharp[name](Program1.cs)]"; + var source = "[!code-csharp[name](Program1.cs)]"; var expected = @"
è­Šć‘Š
@@ -38,7 +38,7 @@ public void CodeSnippetGeneral() // " + " \tline for indent & range"; - var source = @"[!code-csharp[name](Program.cs?start=1&end=1&name=tag&range=5-&highlight=1,2-2,4-&dedent=3#tag1)]"; + var source = "[!code-csharp[name](Program.cs?start=1&end=1&name=tag&range=5-&highlight=1,2-2,4-&dedent=3#tag1)]"; // assert var expected = @"
 line1
@@ -69,7 +69,7 @@ public void NotebookCodeSnippetGeneral()
   }
  ]
 }";
-        var source = @"[!notebook-python[](Program.ipynb?name=import)]";
+        var source = "[!notebook-python[](Program.ipynb?name=import)]";
 
         var expected = @"
import azureml.core
 print(azureml.core.VERSION)
"; @@ -100,7 +100,7 @@ public void NotebookCodeSnippetTagNotFound() ] }"; - var source = @"[!notebook-python[](Program.ipynb?name=nonexistent)]"; + var source = "[!notebook-python[](Program.ipynb?name=nonexistent)]"; var expected = @"
"; TestUtility.VerifyMarkup( @@ -146,7 +146,7 @@ public void NotebookCodeSnippetMultipleTagFound() ] }"; - var source = @"[!notebook-python[](Program.ipynb?name=import)]"; + var source = "[!notebook-python[](Program.ipynb?name=import)]"; var expected = @"
"; TestUtility.VerifyMarkup( @@ -294,7 +294,7 @@ public void TestFencesBlockLevel() [Theory] [Trait("Related", "Markdown")] #region Inline Data - [InlineData(@"[!code-csharp[Main](Program.cs)]", @"
namespace ConsoleApplication1
+    [InlineData("[!code-csharp[Main](Program.cs)]", @"
namespace ConsoleApplication1
 {
     // <namespace>
     using System;
@@ -422,7 +422,7 @@ static void Main(string[] args)
             int i = 100;
         }
 
")] - [InlineData(@"[!code-csharp[Main](Program.cs?highlight=1)]", @"
namespace ConsoleApplication1
+    [InlineData("[!code-csharp[Main](Program.cs?highlight=1)]", @"
namespace ConsoleApplication1
 {
     // <namespace>
     using System;
@@ -487,7 +487,7 @@ static void Main(string[] args)
             int i = 100;
         }
 
")] - [InlineData(@"[!code-csharp[Main](Program.cs?dedent=0)]", @"
namespace ConsoleApplication1
+    [InlineData("[!code-csharp[Main](Program.cs?dedent=0)]", @"
namespace ConsoleApplication1
 {
     // <namespace>
     using System;
@@ -658,7 +658,7 @@ public Greet(string who)
     [Trait("Related", "Markdown")]
     public void TestFencesBlockLevelWithWorkingFolder()
     {
-        var root = @"[!code-REST[REST](~/api.json)]";
+        var root = "[!code-REST[REST](~/api.json)]";
         var apiJsonContent = @"
 {
    ""method"": ""GET"",
@@ -698,7 +698,7 @@ public void CodeSnippetShouldVerifyTagname()
     // 
 " + " \tline for indent & range";
 
-        var markdown = @"[!code-csharp[name](Program.cs#tag1)]";
+        var markdown = "[!code-csharp[name](Program.cs#tag1)]";
 
         // assert
         var expected = @"
line1
diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/GeneralTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/GeneralTest.cs
index 92bfef87bda..6e36e91c233 100644
--- a/test/Docfx.MarkdigEngine.Extensions.Tests/GeneralTest.cs
+++ b/test/Docfx.MarkdigEngine.Extensions.Tests/GeneralTest.cs
@@ -12,7 +12,7 @@ public class GeneralTest
     public void MarkdigWithDefaultFAL()
     {
         var source = "[!INCLUDE [title](~/token1573.md)]";
-        var expected = @"

token content

"; + var expected = "

token content

"; TestUtility.VerifyMarkup(source, expected, files: new Dictionary { @@ -79,7 +79,7 @@ Term 1 [Trait("Related", "DfmMarkdown")] public void TestDfm_HeadingId() { - var source = @" ### 1. Deploying the network"; + var source = " ### 1. Deploying the network"; var expected = @"

1. Deploying the network

"; TestUtility.VerifyMarkup(source, expected); @@ -137,7 +137,7 @@ public void TestDfmImageLink_WithSpecialCharactersInAltText() "

Hello dummy

\n

\n")] [InlineData("a\n```\nc\n```", "

a

\n
c\n
\n")] - [InlineData(@" *hello* abc @api__1", + [InlineData(" *hello* abc @api__1", "

hello abc

\n")] [InlineData("@1abc", "

@1abc

\n")] [InlineData(@"@api1 @api__1 @api!1 @api@a @'a p ';@""a!pi"",@api...@api", @@ -146,7 +146,7 @@ public void TestDfmImageLink_WithSpecialCharactersInAltText() [InlineData("text", "

text

\n")] [InlineData("text", "

text

\n")] [InlineData( -@"[*a*](xref:uid)", +"[*a*](xref:uid)", "

a

\n")] [InlineData( @"# Y", @@ -415,7 +415,7 @@ [test link1](Topics/topic.md) Update without force build, while a.md include b.md and b.md updated."; - string testtoken = @"terry & jack"; + string testtoken = "terry & jack"; string code = @"// using System; diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/InteractiveCodeTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/InteractiveCodeTest.cs index b594c211290..342bfe60d06 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/InteractiveCodeTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/InteractiveCodeTest.cs @@ -12,7 +12,7 @@ public class InteractiveCodeTest public void TestInteractiveCode_CodeSnippetSimple() { TestUtility.VerifyMarkup( - @"[!code-azurecli-interactive[](InteractiveCode/sample.code)]", + "[!code-azurecli-interactive[](InteractiveCode/sample.code)]", @"
hello world!
 
", files: new Dictionary diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/LineNumberTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/LineNumberTest.cs index 277b7ab6057..a13269f9664 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/LineNumberTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/LineNumberTest.cs @@ -40,7 +40,7 @@ public void LineNumberTest_CodeSnippet() line1 // "; - var source = @"[!code[tag-test](LineNumber/Program.cs#Tag)]"; + var source = "[!code[tag-test](LineNumber/Program.cs#Tag)]"; var expected = @"
line1
 
"; diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoIdentifierTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoIdentifierTest.cs index 0d925490e1d..3ea1dc24ed2 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoIdentifierTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoIdentifierTest.cs @@ -17,7 +17,7 @@ public class AutoIdentifierTest public void AutoIdentifierTest_DocfxDefault() { // docfx use `AutoIdentifierOptions.GitHub` as default options. - var content = @"# This - is a &@! heading _ with . and ! -"; + var content = "# This - is a &@! heading _ with . and ! -"; var expected = @"

This - is a &@! heading _ with . and ! -

"; TestUtility.VerifyMarkup(content, expected); @@ -29,7 +29,7 @@ public void AutoIdentifierTest_DocfxDefault() [Fact] public void AutoIdentifierTest_MarkdigDefault() { - var content = @"# This - is a &@! heading _ with . and ! -"; + var content = "# This - is a &@! heading _ with . and ! -"; var expected = @"

This - is a &@! heading _ with . and ! -

"; // Default option is used when @@ -47,7 +47,7 @@ public void AutoIdentifierTest_MarkdigDefault() [Fact] public void AutoIdentifierTest_None() { - var content = @"# This - is a &@! heading _ with . and ! -"; + var content = "# This - is a &@! heading _ with . and ! -"; var expected = @"

This - is a &@! heading _ with . and ! -

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoLinkTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoLinkTest.cs index d5097cd427e..11978ad09cc 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoLinkTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/AutoLinkTest.cs @@ -36,7 +36,7 @@ public void AutoLinkTest_Custom() ValidPreviousCharacters = "*_~(" // Default: *_~(" }; - var content = @"Sample URL (http://www.google.com)"; + var content = "Sample URL (http://www.google.com)"; var expected = @"

Sample URL (http://www.google.com)

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmojiTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmojiTest.cs index b553c050151..1154ab32225 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmojiTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmojiTest.cs @@ -16,7 +16,7 @@ public class EmojiTest [Fact] public void EmojiTest_DocfxDefault() { - var content = @"**content :** :smile:"; + var content = "**content :** :smile:"; var expected = @"

content : 😄

"; // By default. `UseEmojiAndSmiley(enableSmileys: false)` option used. @@ -26,7 +26,7 @@ public void EmojiTest_DocfxDefault() [Fact] public void EmojiTest_MarkdigDefault() { - var content = @":)"; + var content = ":)"; var expected = @"

😃

"; // `UseEmojiAndSmiley(enableSmileys: true)` option is used when enable `Emojis` extension by name. @@ -36,7 +36,7 @@ public void EmojiTest_MarkdigDefault() [Fact] public void EmojiTest_Smileys_Enabled() { - var content = @":)"; + var content = ":)"; var expected = @"

😃

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ @@ -47,8 +47,8 @@ public void EmojiTest_Smileys_Enabled() [Fact] public void EmojiTest_Smileys_Disabled() { - var content = @":)"; - var expected = @"

:)

"; + var content = ":)"; + var expected = "

:)

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ new("Emojis", "Default"), diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmphasisExtraTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmphasisExtraTest.cs index 357895b70c3..3bf1bfb5593 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmphasisExtraTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/MarkdigBuiltinExtensionTests/EmphasisExtraTest.cs @@ -16,8 +16,8 @@ public class EmphasisExtraTest [Fact] public void EmphasisExtraTest_DocfxDefault() { - var content = @"The following text ~~is deleted~~"; - var expected = @"

The following text is deleted

"; + var content = "The following text ~~is deleted~~"; + var expected = "

The following text is deleted

"; // `Strikethrough` is enabled by default. TestUtility.VerifyMarkup(content, expected); @@ -51,7 +51,7 @@ The following text is deleted [Fact] public void EmphasisExtraTest_SuperscriptAndSubscript() { - var content = @"H~2~O is a liquid. 2^10^ is 1024"; + var content = "H~2~O is a liquid. 2^10^ is 1024"; // `Superscript` and `Subscript` are disabled by default. { @@ -60,7 +60,7 @@ public void EmphasisExtraTest_SuperscriptAndSubscript() } // `Superscript` and `Subscript` is enabled when using default options or option is explicitly specified. { - var expected = @"

H2O is a liquid. 210 is 1024

"; + var expected = "

H2O is a liquid. 210 is 1024

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ new("EmphasisExtras", "Superscript, Subscript")]); } @@ -69,7 +69,7 @@ public void EmphasisExtraTest_SuperscriptAndSubscript() [Fact] public void EmphasisExtraTest_Inserted() { - var content = @"++Inserted text++"; + var content = "++Inserted text++"; // `Inserted` is disabled by default. { @@ -78,7 +78,7 @@ public void EmphasisExtraTest_Inserted() } // `Inserted` is enabled when using default options or option is explicitly specified. { - var expected = @"

Inserted text

"; + var expected = "

Inserted text

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ new("EmphasisExtras", "Inserted")]); } @@ -87,7 +87,7 @@ public void EmphasisExtraTest_Inserted() [Fact] public void EmphasisExtraTest_Marked() { - var content = @"==Marked text=="; + var content = "==Marked text=="; // `Marked` is disabled by default. { @@ -96,7 +96,7 @@ public void EmphasisExtraTest_Marked() } // `Marked` is enabled when using default options or option is explicitly specified. { - var expected = @"

Marked text

"; + var expected = "

Marked text

"; TestUtility.VerifyMarkup(content, expected, optionalExtensions: [ new("EmphasisExtras", "Marked")]); } diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs index 218bc09aa9c..cd9341fff8c 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs @@ -20,7 +20,7 @@ public void NolocTest_General() // Markdown in noloc TestUtility.VerifyMarkup( @":::no-loc text=""*Hello*"":::", - @"

*Hello*

"); + "

*Hello*

"); } [Fact] @@ -31,15 +31,15 @@ public void NolocTest_Invalid() TestUtility.VerifyMarkup( @":::no-loc text=""I am crossing\ a line"":::", - @"

:::no-loc text="I am crossing
a line":::

"); + "

:::no-loc text="I am crossing
a line":::

"); // Spaces not exactly match TestUtility.VerifyMarkup( @"::: no-loc text=""test"" :::", - @"

::: no-loc text="test" :::

"); + "

::: no-loc text="test" :::

"); // Case sensitive TestUtility.VerifyMarkup( - @":::No-loc text=""test"":::", @"

:::No-loc text="test":::

"); + @":::No-loc text=""test"":::", "

:::No-loc text="test":::

"); } } diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/QuoteSectionNoteTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/QuoteSectionNoteTest.cs index f82b82a638f..de4d5279a1d 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/QuoteSectionNoteTest.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/QuoteSectionNoteTest.cs @@ -385,7 +385,7 @@ public void TestSectionBlockLevelRecursive(string source) [Theory] [Trait("Related", "DfmMarkdown")] - [InlineData(@"> [!div]", "
\n
\n")] + [InlineData("> [!div]", "
\n
\n")] [InlineData(@"> [!div `id=""error""]", "
\n
\n")] [InlineData(@"> [!div `id=""right""`]", "
\n
\n")] public void TestSectionCornerCase(string source, string expected) diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/TestUtility.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/TestUtility.cs index b1aefa29937..32d6ac85ba1 100644 --- a/test/Docfx.MarkdigEngine.Extensions.Tests/TestUtility.cs +++ b/test/Docfx.MarkdigEngine.Extensions.Tests/TestUtility.cs @@ -32,7 +32,7 @@ public static string VerifyMarkup( var actualDependencies = new HashSet(); var markdownContext = new MarkdownContext( - getToken: key => tokens.TryGetValue(key, out var value) ? value : null, + getToken: key => tokens.GetValueOrDefault(key), logInfo: (a, b, c, d) => { }, logSuggestion: Log("suggestion"), logWarning: Log("warning"), diff --git a/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs b/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs index a5ecb498000..98acf3606bc 100644 --- a/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs +++ b/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs @@ -298,9 +298,9 @@ public void TestBlockLevelInclusion() [!include-[link2](../link/link2.md)] ![Image](img/img.jpg) [!include-[root](../root.md)]"; - var link2 = @"[link](md/c.md)"; + var link2 = "[link](md/c.md)"; var refc = @"[!include[c](../c/c.md ""This is root"")]"; - var c = @"**Hello**"; + var c = "**Hello**"; TestUtility.WriteToFile("r/root.md", root); TestUtility.WriteToFile("r/a/refc.md", refc); @@ -389,7 +389,7 @@ public void TestBlockLevelInclusionWithSameFile() dependency.Clear(); marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md"); dependency = marked.Dependency; - Assert.Equal($@"{expected}{expected}", marked.Html); + Assert.Equal($"{expected}{expected}", marked.Html); Assert.Equal( new[] { "a/a.md", "b/token.md", "c/d/d.md" }, dependency.OrderBy(x => x).ToArray()); @@ -403,12 +403,12 @@ public void TestBlockLevelInclusionWithWorkingFolder() // |- root.md // |- b // | |- linkAndRefRoot.md - var root = @"[!include[linkAndRefRoot](~/r/b/linkAndRefRoot.md)]"; - var linkAndRefRoot = @"Paragraph1"; + var root = "[!include[linkAndRefRoot](~/r/b/linkAndRefRoot.md)]"; + var linkAndRefRoot = "Paragraph1"; TestUtility.WriteToFile("r/root.md", root); TestUtility.WriteToFile("r/b/linkAndRefRoot.md", linkAndRefRoot); var marked = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md"); - var expected = @"

Paragraph1

" + "\n"; + var expected = "

Paragraph1

" + "\n"; Assert.Equal(expected, marked.Html); } @@ -449,7 +449,7 @@ public void TestFallback_Inclusion_random_name() markdown token1.md content end."; - var token2 = @"**1markdown token2.md main content**"; + var token2 = "**1markdown token2.md main content**"; TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/root_{uniqueFolderName}.md", root); TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/a_folder_{uniqueFolderName}/a_{uniqueFolderName}.md", a); @@ -529,11 +529,11 @@ code_in_a in a.md content end markdown a.md a.md content end."; - var code_in_a = @"namespace code_in_a{}"; + var code_in_a = "namespace code_in_a{}"; - var sample1 = @"namespace sample1{}"; + var sample1 = "namespace sample1{}"; - var sample2 = @"namespace sample2{}"; + var sample2 = "namespace sample2{}"; var uniqueFolderName = Path.GetRandomFileName(); TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/root.md", root); @@ -602,7 +602,7 @@ public void TestInclusion_InlineLevel() var ref1 = @"[!include[ref2](ref2.md ""This is root"")]"; var ref2 = @"## Inline inclusion do not parse header [!include[root](root.md ""This is root"")]"; - var ref3 = @"**Hello** "; + var ref3 = "**Hello** "; File.WriteAllText("root.md", root); File.WriteAllText("ref1.md", ref1); File.WriteAllText("ref2.md", ref2); @@ -635,9 +635,9 @@ public void TestBlockInclude_ShouldExcludeBracketInRegex()

inc3

"; - var inc1 = @"inc1"; - var inc2 = @"inc2"; - var inc3 = @"inc3"; + var inc1 = "inc1"; + var inc2 = "inc2"; + var inc3 = "inc3"; File.WriteAllText("root.md", root); File.WriteAllText("inc1.md", inc1); File.WriteAllText("inc2.md", inc2); @@ -791,7 +791,7 @@ public void TestComplexImageBlockSrcResolveInToken() [Fact] public void ImageTestBlockGeneralWithInclude() { - var source = @"[!include[](includes/source.md)]"; + var source = "[!include[](includes/source.md)]"; var includeContent = @":::image type=""content"" source=""../media/example.jpg"" alt-text=""example"" lightbox=""../media/example.jpg""::: :::image type=""content"" source=""~/media/example.jpg"" alt-text=""example"" lightbox=""~/media/example.jpg""::: diff --git a/test/Docfx.MarkdigEngine.Tests/MarkdigServiceTest.cs b/test/Docfx.MarkdigEngine.Tests/MarkdigServiceTest.cs index e085ef103aa..fa724a9d9bd 100644 --- a/test/Docfx.MarkdigEngine.Tests/MarkdigServiceTest.cs +++ b/test/Docfx.MarkdigEngine.Tests/MarkdigServiceTest.cs @@ -43,8 +43,8 @@ public void MarkdigServiceTest_ParseAndRender_Inclusion() // |- root.md // |- b // | |- linkAndRefRoot.md - var root = @"[!include[linkAndRefRoot](~/x/b/linkAndRefRoot.md)]"; - var linkAndRefRoot = @"Paragraph1"; + var root = "[!include[linkAndRefRoot](~/x/b/linkAndRefRoot.md)]"; + var linkAndRefRoot = "Paragraph1"; TestUtility.WriteToFile("x/root.md", root); TestUtility.WriteToFile("x/b/linkAndRefRoot.md", linkAndRefRoot); @@ -55,7 +55,7 @@ public void MarkdigServiceTest_ParseAndRender_Inclusion() Assert.IsType(document[0]); var mr = service.Render(document); - var expected = @"

Paragraph1

" + "\n"; + var expected = "

Paragraph1

" + "\n"; Assert.Equal(expected, mr.Html); var expectedDependency = new List { "b/linkAndRefRoot.md" }; @@ -66,7 +66,7 @@ public void MarkdigServiceTest_ParseAndRender_Inclusion() [Trait("Related", "MarkdigService")] public void MarkdigServiceTest_ParseInline() { - var content = @"# I am a heading"; + var content = "# I am a heading"; var service = TestUtility.CreateMarkdownService(); var document = service.Parse(content, "topic.md", true); var result = service.Render(document, true).Html; diff --git a/test/Docfx.MarkdigEngine.Tests/TestUtility/TestLoggerListener.cs b/test/Docfx.MarkdigEngine.Tests/TestUtility/TestLoggerListener.cs index 1ae1276140a..f1f562fdcbb 100644 --- a/test/Docfx.MarkdigEngine.Tests/TestUtility/TestLoggerListener.cs +++ b/test/Docfx.MarkdigEngine.Tests/TestUtility/TestLoggerListener.cs @@ -7,7 +7,7 @@ namespace Docfx.MarkdigEngine.Tests; internal class TestLoggerListener : ILoggerListener { - public List Items { get; } = new List(); + public List Items { get; } = new(); public void Dispose() { diff --git a/test/Docfx.Tests.Common/TestBase.cs b/test/Docfx.Tests.Common/TestBase.cs index e18bdad30cf..de225743eca 100644 --- a/test/Docfx.Tests.Common/TestBase.cs +++ b/test/Docfx.Tests.Common/TestBase.cs @@ -24,20 +24,6 @@ protected string GetRandomFolder() return folder; } - protected string MoveToRandomFolder(string origin) - { - var folder = GetFolder(); - - lock (_locker) - { - _folderCollection.Remove(folder); - _folderCollection.Add(folder); - } - - Directory.Move(origin, folder); - return folder; - } - private static string GetFolder() { var folder = Path.GetRandomFileName(); @@ -86,16 +72,6 @@ protected static string UpdateFile(string fileName, string[] lines, string baseF return CreateFile(fileName, lines, baseFolder); } - protected static string UpdateFile(string fileName, string content, string baseFolder) - { - ArgumentNullException.ThrowIfNull(fileName); - ArgumentNullException.ThrowIfNull(content); - ArgumentNullException.ThrowIfNull(baseFolder); - - File.Delete(Path.Combine(baseFolder, fileName)); - return CreateFile(fileName, content, baseFolder); - } - protected static string CreateDirectory(string dir, string baseFolder) { if (string.IsNullOrEmpty(dir)) diff --git a/test/Docfx.Tests.Common/TestLoggerListener.cs b/test/Docfx.Tests.Common/TestLoggerListener.cs index 186a526b15c..f284e2d53ca 100644 --- a/test/Docfx.Tests.Common/TestLoggerListener.cs +++ b/test/Docfx.Tests.Common/TestLoggerListener.cs @@ -7,7 +7,7 @@ namespace Docfx.Tests.Common; public class TestLoggerListener : ILoggerListener { - public List Items { get; } = new List(); + public List Items { get; } = new(); private readonly Func _filter; @@ -35,7 +35,7 @@ public void Dispose() } public static TestLoggerListener CreateLoggerListenerWithCodeFilter(string code, LogLevel logLevel = LogLevel.Warning) - => new(i => i.LogLevel >= logLevel && i?.Code == code); + => new(i => i.LogLevel >= logLevel && i.Code == code); public static TestLoggerListener CreateLoggerListenerWithCodesFilter(List codes, LogLevel logLevel = LogLevel.Warning) => new(i => i.LogLevel >= logLevel && codes.Contains(i.Code)); diff --git a/test/docfx.Snapshot.Tests/PercyTest.cs b/test/docfx.Snapshot.Tests/PercyTest.cs index 59a2b58261c..99d51eb4262 100644 --- a/test/docfx.Snapshot.Tests/PercyTest.cs +++ b/test/docfx.Snapshot.Tests/PercyTest.cs @@ -38,6 +38,7 @@ public PercyFactAttribute() static PercyTest() { + PlaywrightHelper.EnsurePlaywrightNodeJsPath(); Microsoft.Playwright.Program.Main(["install", "chromium"]); } @@ -57,7 +58,7 @@ public async Task SeedHtml() var _ = Task.Run(() => Program.Main(["serve", "--port", $"{port}", $"{samplePath}/_site"])) .ContinueWith(x => { - Logger.LogError("Failed to run `dotnet serve` command. " + x.Exception.ToString()); + Logger.LogError("Failed to run `dotnet serve` command. " + x.Exception); }, TaskContinuationOptions.OnlyOnFaulted); // Wait until web server started. diff --git a/test/docfx.Tests/DocsetBuildTest.cs b/test/docfx.Tests/DocsetBuildTest.cs index 443242ee5e8..5fecde33aaa 100644 --- a/test/docfx.Tests/DocsetBuildTest.cs +++ b/test/docfx.Tests/DocsetBuildTest.cs @@ -49,31 +49,6 @@ private static async Task>> Build(Dictionary new Func(() => File.ReadAllText(f))); } - private static async Task>> Pdf(Dictionary files, [CallerMemberName] string testName = null) - { - var testDirectory = $"{nameof(DocsetBuildTest)}/{testName}"; - var outputDirectory = $"{testDirectory}/_pdf"; - - if (Directory.Exists(testDirectory)) - Directory.Delete(testDirectory, recursive: true); - - Directory.CreateDirectory(testDirectory); - foreach (var (path, content) in files) - { - var targetPath = Path.Combine(testDirectory, path); - Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); - - File.WriteAllText(targetPath, content); - } - - await Docset.Pdf($"{testDirectory}/docfx.json"); - - return Directory.GetFiles(outputDirectory, "*", SearchOption.AllDirectories) - .ToDictionary( - f => Path.GetRelativePath(outputDirectory, f), - f => new Func(() => File.ReadAllText(f))); - } - [Fact] public static async Task CustomLogo_Override_LogoFromTemplate() { diff --git a/test/docfx.Tests/JsonSchemaTest.cs b/test/docfx.Tests/JsonSchemaTest.cs index 860ca3b6ff0..1f09a6ab4e4 100644 --- a/test/docfx.Tests/JsonSchemaTest.cs +++ b/test/docfx.Tests/JsonSchemaTest.cs @@ -176,13 +176,4 @@ private static JsonElement LoadAsJsonElement(string path) throw new NotSupportedException(path); } } - - private void WriteFailedResultsDetails(EvaluationResults result) - { - if (result.IsValid) - return; - - var json = JsonSerializer.Serialize(result, JsonSerializerOptions.Default); - output.WriteLine(json); - } } diff --git a/test/docfx.Tests/PublicApiContractTest.cs b/test/docfx.Tests/PublicApiContractTest.cs index a644c409b86..d54d39da116 100644 --- a/test/docfx.Tests/PublicApiContractTest.cs +++ b/test/docfx.Tests/PublicApiContractTest.cs @@ -14,7 +14,7 @@ public static Task TestPublicApiContract() var assemblies = new HashSet(); GetAssemblies(typeof(Docset).Assembly); - var publicApi = string.Join("\n", assemblies + var publicApi = string.Join('\n', assemblies .OrderBy(a => a.FullName) .Select(a => a.GeneratePublicApi(new() { IncludeAssemblyAttributes = false }))); diff --git a/test/docfx.Tests/Utilities/JsonSchemaUtility.cs b/test/docfx.Tests/Utilities/JsonSchemaUtility.cs index f121025e335..1710ff85f52 100644 --- a/test/docfx.Tests/Utilities/JsonSchemaUtility.cs +++ b/test/docfx.Tests/Utilities/JsonSchemaUtility.cs @@ -9,7 +9,7 @@ namespace Docfx.Tests; internal static class JsonSchemaUtility { - public static readonly JsonSerializerOptions DefaultSerializerOptions = new JsonSerializerOptions + public static readonly JsonSerializerOptions DefaultSerializerOptions = new() { PropertyNameCaseInsensitive = true, AllowTrailingCommas = true, @@ -19,7 +19,7 @@ internal static class JsonSchemaUtility WriteIndented = true, }; - public static readonly EvaluationOptions DefaultEvaluationOptions = new EvaluationOptions + public static readonly EvaluationOptions DefaultEvaluationOptions = new() { ValidateAgainstMetaSchema = false, OutputFormat = OutputFormat.List,