From c2b46819892a23c39aa74bb94c2fd0a0909386c6 Mon Sep 17 00:00:00 2001 From: Tomas Matousek Date: Thu, 23 Oct 2025 11:02:15 -0700 Subject: [PATCH 1/3] Fix casing --- .editorconfig | 253 ++++++++++++------ .../GitProvider/GetSourceLinkUrlGitTask.cs | 18 +- 2 files changed, 173 insertions(+), 98 deletions(-) diff --git a/.editorconfig b/.editorconfig index eb0d1eaa..365b09b5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,120 +1,164 @@ -# EditorConfig is awesome: -http://EditorConfig.org +# EditorConfig is awesome: https://EditorConfig.org # top-most EditorConfig file root = true +# Don't use tabs for indentation. [*] indent_style = space -insert_final_newline = false +# Code files [*.{cs,csx,vb,vbx}] indent_size = 4 +insert_final_newline = true +charset = utf-8-bom -[*.*proj] +# XML project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] indent_size = 2 -[*.{json,props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct,vcxproj.filters,projitems}] +# XML config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] indent_size = 2 -[*.{sh}] -end_of_line = lf +# JSON files +[*.json] indent_size = 2 -[*.{ps1,cmd}] +# Powershell files +[*.ps1] indent_size = 2 -#### .NET Coding Conventions #### +# Shell script files +[*.sh] +end_of_line = lf +indent_size = 2 -# this. and Me. preferences -dotnet_style_qualification_for_event = false:warning -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_property = false:warning +# Dotnet code style settings: +[*.{cs,vb}] -# Language keywords vs BCL types preferences -dotnet_style_predefined_type_for_locals_parameters_members = true:warning -dotnet_style_predefined_type_for_member_access = true:warning +# Sort using and Import directives with System.* appearing first +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false +# Avoid "this." and "Me." if not necessary +dotnet_style_qualification_for_field = false:refactoring +dotnet_style_qualification_for_property = false:refactoring +dotnet_style_qualification_for_method = false:refactoring +dotnet_style_qualification_for_event = false:refactoring -# Parentheses preferences -dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:silent -dotnet_style_parentheses_in_other_binary_operators = never_if_unnecessary:silent -dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion -dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:silent +# Use language keywords instead of framework type names for type references +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion -# Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +# Suggest more modern language features when available +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion -# Expression-level preferences -csharp_style_deconstructed_variable_declaration = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion -csharp_style_throw_expression = true:suggestion -dotnet_style_coalesce_expression = true:warning -dotnet_style_collection_initializer = false:silent -dotnet_style_explicit_tuple_names = true:warning -dotnet_style_null_propagation = true:warning -dotnet_style_object_initializer = false:silent -dotnet_style_prefer_auto_properties = true:suggestion -dotnet_style_prefer_compound_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:silent -dotnet_style_prefer_conditional_expression_over_return = true:silent -dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion -dotnet_style_prefer_inferred_tuple_names = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning - -# Field preferences -dotnet_style_readonly_field = true:warning - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:warning - -#### C# Coding Conventions #### - -# var preferences -csharp_style_var_elsewhere = true:silent -csharp_style_var_for_built_in_types = false:silent -csharp_style_var_when_type_is_apparent = true:suggestion +# Whitespace options +dotnet_style_allow_multiple_blank_lines_experimental = false -# Expression-bodied members -csharp_style_expression_bodied_accessors = true:suggestion -csharp_style_expression_bodied_constructors = true:silent -csharp_style_expression_bodied_indexers = true:suggestion -csharp_style_expression_bodied_lambdas = true:suggestion -csharp_style_expression_bodied_local_functions = true:suggestion -csharp_style_expression_bodied_methods = when_on_single_line:suggestion -csharp_style_expression_bodied_operators = when_on_single_line:suggestion -csharp_style_expression_bodied_properties = true:suggestion - -# Pattern matching preferences -csharp_style_pattern_matching_over_as_with_null_check = true:suggestion -csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +# Non-private static fields are PascalCase +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style -# Null-checking preferences -csharp_style_conditional_delegate_call = true:warning +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static -# Modifier preferences -csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case -# Code-block preferences -csharp_prefer_braces = true:warning +# Non-private readonly fields are PascalCase +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style -# Expression-level preferences -csharp_prefer_simple_default_expression = true:warning -csharp_style_pattern_local_over_anonymous_function = true:suggestion -csharp_style_prefer_index_operator = true:suggestion -csharp_style_prefer_range_operator = true:suggestion -csharp_style_unused_value_assignment_preference = discard_variable:warning -csharp_style_unused_value_expression_statement_preference = discard_variable:suggestion +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly -#### C# Formatting Rules #### +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case -# New line preferences -csharp_new_line_before_catch = true +# Constants are PascalCase +dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style + +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.constant_style.capitalization = pascal_case + +# Static fields are camelCase and start with s_ +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +dotnet_naming_style.static_field_style.required_prefix = s_ + +# Instance fields are camelCase and start with _ +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +# Locals and parameters are camelCase +dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local + +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Local functions are PascalCase +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function + +dotnet_naming_style.local_function_style.capitalization = pascal_case + +# By default, name items with PascalCase +dotnet_naming_rule.members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members +dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.all_members.applicable_kinds = * + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.\nSee the LICENSE file in the project root for more information. + +# RS0016: Only enable if API files are present +dotnet_public_api_analyzer.require_api_files = true + +# IDE0055: Fix formatting +# Workaround for https://github.com/dotnet/roslyn/issues/70570 +dotnet_diagnostic.IDE0055.severity = warning + + +# CSharp code style settings: +[*.cs] +# Newline settings +csharp_new_line_before_open_brace = all csharp_new_line_before_else = true +csharp_new_line_before_catch = true csharp_new_line_before_finally = true -csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_open_brace = all +csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_between_query_expression_clauses = true # Indentation preferences @@ -122,8 +166,38 @@ csharp_indent_block_contents = true csharp_indent_braces = false csharp_indent_case_contents = true csharp_indent_case_contents_when_block = true -csharp_indent_labels = one_less_than_current csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# Whitespace options +csharp_style_allow_embedded_statements_on_same_line_experimental = false +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false + +# Prefer "var" everywhere +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = true:suggestion + +# Prefer method-like constructs to have a block body +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none + +# Prefer property-like constructs to have an expression-body +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Suggest more modern language features when available +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion # Space preferences csharp_space_after_cast = false @@ -133,7 +207,7 @@ csharp_space_after_dot = false csharp_space_after_keywords_in_control_flow_statements = true csharp_space_after_semicolon_in_for_statement = true csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false +csharp_space_around_declaration_statements = do_not_ignore csharp_space_before_colon_in_inheritance_clause = true csharp_space_before_comma = false csharp_space_before_dot = false @@ -149,10 +223,11 @@ csharp_space_between_method_declaration_parameter_list_parentheses = false csharp_space_between_parentheses = false csharp_space_between_square_brackets = false -# Wrapping preferences +# Blocks are allowed +csharp_prefer_braces = true:silent csharp_preserve_single_line_blocks = true csharp_preserve_single_line_statements = true +# IDE0060: Remove unused parameter +dotnet_diagnostic.IDE0060.severity = warning -[*.{cs}] -file_header_template = Licensed to the.NET Foundation under one or more agreements.\nThe.NET Foundation licenses this file to you under the MIT license.\nSee the License.txt file in the project root for more information. diff --git a/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs b/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs index 553bd9b6..204ba1fb 100644 --- a/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs +++ b/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs @@ -121,11 +121,11 @@ private void ExecuteImpl() return; } - static bool isHexDigit(char c) + static bool IsHexDigit(char c) => c is >= '0' and <= '9' or >= 'a' and <= 'f' or >= 'A' and <= 'F'; string revisionId = SourceRoot.GetMetadata(Names.SourceRoot.RevisionId); - if (revisionId == null || revisionId.Length != 40 || !revisionId.All(isHexDigit)) + if (revisionId == null || revisionId.Length != 40 || !revisionId.All(IsHexDigit)) { Log.LogError(CommonResources.ValueOfWithIdentityIsNotValidCommitHash, Names.SourceRoot.RevisionIdFullName, SourceRoot.ItemSpec, revisionId); return; @@ -134,10 +134,10 @@ static bool isHexDigit(char c) var relativeUrl = gitUri.GetPath().TrimEnd('/'); // The URL may or may not end with '.git' (case-sensitive), but content URLs do not include '.git' suffix: - const string gitUrlSuffix = ".git"; - if (relativeUrl.EndsWith(gitUrlSuffix, StringComparison.Ordinal) && !relativeUrl.EndsWith("/" + gitUrlSuffix, StringComparison.Ordinal)) + const string GitUrlSuffix = ".git"; + if (relativeUrl.EndsWith(GitUrlSuffix, StringComparison.Ordinal) && !relativeUrl.EndsWith("/" + GitUrlSuffix, StringComparison.Ordinal)) { - relativeUrl = relativeUrl.Substring(0, relativeUrl.Length - gitUrlSuffix.Length); + relativeUrl = relativeUrl.Substring(0, relativeUrl.Length - GitUrlSuffix.Length); } SourceLinkUrl = BuildSourceLinkUrl(contentUri, gitUri, relativeUrl, revisionId, hostItem); @@ -167,7 +167,7 @@ public UrlMapping(string host, ITaskItem? hostItem, int port, Uri contentUri, bo private IEnumerable GetUrlMappings(Uri gitUri) { - static bool isValidContentUri(Uri uri) + static bool IsValidContentUri(Uri uri) => uri.GetHost() != "" && uri.Query == "" && uri.UserInfo == ""; if (Hosts != null) @@ -189,7 +189,7 @@ static bool isValidContentUri(Uri uri) { contentUri = GetDefaultContentUriFromHostUri(hostUri.GetAuthority(), gitUri); } - else if (!Uri.TryCreate(contentUrl, UriKind.Absolute, out contentUri) || !isValidContentUri(contentUri)) + else if (!Uri.TryCreate(contentUrl, UriKind.Absolute, out contentUri) || !IsValidContentUri(contentUri)) { Log.LogError(CommonResources.ValuePassedToTaskParameterNotValidHostUri, nameof(Hosts), contentUrl); continue; @@ -224,7 +224,7 @@ static bool isValidContentUri(Uri uri) private static bool TryGetMatchingContentUri(UrlMapping[] mappings, Uri repoUri, [NotNullWhen(true)]out Uri? contentUri, out ITaskItem? hostItem) { - UrlMapping? findMatch(bool exactHost) + UrlMapping? FindMatch(bool exactHost) { UrlMapping? candidate = null; @@ -250,7 +250,7 @@ private static bool TryGetMatchingContentUri(UrlMapping[] mappings, Uri repoUri, return candidate; } - var result = findMatch(exactHost: true) ?? findMatch(exactHost: false); + var result = FindMatch(exactHost: true) ?? FindMatch(exactHost: false); if (result == null) { contentUri = null; From b7af92245da88bb96e021f5b9ec15ac5e02d592a Mon Sep 17 00:00:00 2001 From: Tomas Matousek Date: Thu, 23 Oct 2025 11:02:36 -0700 Subject: [PATCH 2/3] var --- .../AzureDevOps/AzureDevOpsUrlParser.cs | 14 +++--- .../GitProvider/GetSourceLinkUrlGitTask.cs | 8 ++-- src/Common/Utilities/Hash.cs | 34 ++++++------- src/Common/Utilities/Index.cs | 2 +- src/Common/Utilities/PathUtilities.cs | 2 +- src/Common/Utilities/SequenceComparer.cs | 2 +- src/Common/Utilities/UriUtilities.cs | 4 +- .../GlobTests.cs | 20 ++++---- .../GitDataReader/GitConfig.Reader.cs | 24 +++++----- .../GitDataReader/GitIgnore.Matcher.cs | 10 ++-- .../GitDataReader/GitIgnore.cs | 8 ++-- .../GitDataReader/GitReferenceResolver.cs | 6 +-- .../GitDataReader/GitRepository.cs | 6 +-- .../GitDataReader/Glob.cs | 24 +++++----- .../GitDataReader/PathUtils.cs | 2 +- .../GitOperations.cs | 16 +++---- .../GetSourceLinkUrlTests.cs | 20 ++++---- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrlTests.cs | 26 +++++----- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrl.cs | 8 ++-- .../GetSourceLinkUrlTests.cs | 20 ++++---- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrl.cs | 4 +- .../GetSourceLinkUrlTests.cs | 48 +++++++++---------- .../TranslateRepositoryUrlsTests.cs | 4 +- .../UriUtilitiesTests.cs | 2 +- .../GenerateSourceLinkFile.cs | 10 ++-- .../GetSourceLinkUrlTests.cs | 4 +- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrlTests.cs | 6 +-- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrlTests.cs | 4 +- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrlTests.cs | 4 +- .../TranslateRepositoryUrlsTests.cs | 2 +- .../GetSourceLinkUrlTests.cs | 4 +- .../TranslateRepositoryUrlsTests.cs | 2 +- src/SourceLink.Tools/SourceLinkMap.cs | 4 +- src/TestUtilities/AssertEx.cs | 6 +-- src/TestUtilities/DiffUtil.cs | 30 ++++++------ .../DotNetSdk/DotNetSdkTestBase.cs | 8 ++-- src/TestUtilities/EnumerableExtensions.cs | 2 +- src/TestUtilities/TempFiles/TempDirectory.cs | 8 ++-- src/dotnet-sourcelink/Program.cs | 20 ++++---- 45 files changed, 220 insertions(+), 220 deletions(-) diff --git a/src/Common/AzureDevOps/AzureDevOpsUrlParser.cs b/src/Common/AzureDevOps/AzureDevOpsUrlParser.cs index dc8635a7..018242fc 100644 --- a/src/Common/AzureDevOps/AzureDevOpsUrlParser.cs +++ b/src/Common/AzureDevOps/AzureDevOpsUrlParser.cs @@ -29,9 +29,9 @@ public static bool TryParseHostedHttp(string host, string relativeUrl, [NotNullW return false; } - int index = 0; + var index = 0; string? account; - bool isVisualStudioHost = IsVisualStudioHostedServer(host); + var isVisualStudioHost = IsVisualStudioHostedServer(host); if (isVisualStudioHost) { @@ -98,7 +98,7 @@ public static bool TryParseOnPremHttp(string relativeUrl, string virtualDirector } // collection: - int i = virtualDirectoryParts.Length; + var i = virtualDirectoryParts.Length; var collection = parts[i++]; if (!TryParsePath(parts, i, "_git", out var projectName, out _, out repositoryName)) @@ -138,7 +138,7 @@ public static bool TryParseHostedSsh(Uri uri, [NotNullWhen(true)]out string? acc account = uri.UserInfo; - int index = 0; + var index = 0; if (StringComparer.OrdinalIgnoreCase.Equals(parts[0], "DefaultCollection")) { index++; @@ -168,7 +168,7 @@ public static bool TryParseOnPremSsh(Uri uri, [NotNullWhen(true)]out string? rep return false; } - if (!TryParseRepositoryName(parts, out int teamNameIndex, "_ssh", out repositoryName)) + if (!TryParseRepositoryName(parts, out var teamNameIndex, "_ssh", out repositoryName)) { return false; } @@ -195,7 +195,7 @@ private static bool TryParsePath(string[] parts, int projectPartIndex, string? t projectName = teamName = null; - if (!TryParseRepositoryName(parts, out int teamNameIndex, type, out repositoryName)) + if (!TryParseRepositoryName(parts, out var teamNameIndex, type, out repositoryName)) { return false; } @@ -228,7 +228,7 @@ private static bool TryParseRepositoryName(string[] parts, out int teamNameIndex repositoryName = null; teamNameIndex = -1; - int i = parts.Length - 1; + var i = parts.Length - 1; if (i < 0) { diff --git a/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs b/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs index 204ba1fb..75fa4d7f 100644 --- a/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs +++ b/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs @@ -124,7 +124,7 @@ private void ExecuteImpl() static bool IsHexDigit(char c) => c is >= '0' and <= '9' or >= 'a' and <= 'f' or >= 'A' and <= 'F'; - string revisionId = SourceRoot.GetMetadata(Names.SourceRoot.RevisionId); + var revisionId = SourceRoot.GetMetadata(Names.SourceRoot.RevisionId); if (revisionId == null || revisionId.Length != 40 || !revisionId.All(IsHexDigit)) { Log.LogError(CommonResources.ValueOfWithIdentityIsNotValidCommitHash, Names.SourceRoot.RevisionIdFullName, SourceRoot.ItemSpec, revisionId); @@ -174,7 +174,7 @@ static bool IsValidContentUri(Uri uri) { foreach (var item in Hosts) { - string hostUrl = item.ItemSpec; + var hostUrl = item.ItemSpec; if (!UriUtilities.TryParseAuthority(hostUrl, out var hostUri)) { @@ -183,8 +183,8 @@ static bool IsValidContentUri(Uri uri) } Uri? contentUri; - string contentUrl = item.GetMetadata(ContentUrlMetadataName); - bool hasDefaultContentUri = string.IsNullOrEmpty(contentUrl); + var contentUrl = item.GetMetadata(ContentUrlMetadataName); + var hasDefaultContentUri = string.IsNullOrEmpty(contentUrl); if (hasDefaultContentUri) { contentUri = GetDefaultContentUriFromHostUri(hostUri.GetAuthority(), gitUri); diff --git a/src/Common/Utilities/Hash.cs b/src/Common/Utilities/Hash.cs index ef351ed0..0fc01127 100644 --- a/src/Common/Utilities/Hash.cs +++ b/src/Common/Utilities/Hash.cs @@ -32,7 +32,7 @@ internal static int Combine(bool newKeyPart, int currentKey) /// internal static int Combine(T newKeyPart, int currentKey) where T : class? { - int hash = unchecked(currentKey * (int)0xA5555529); + var hash = unchecked(currentKey * (int)0xA5555529); if (newKeyPart != null) { @@ -97,7 +97,7 @@ internal static int CombineValues(T[]? values, int maxItemsToHash = int.MaxVa var maxSize = Math.Min(maxItemsToHash, values.Length); var hashCode = 0; - for (int i = 0; i < maxSize; i++) + for (var i = 0; i < maxSize; i++) { T value = values[i]; @@ -201,9 +201,9 @@ internal static int CombineValues(ImmutableArray values, StringComparer /// The FNV-1a hash of internal static int GetFNVHashCode(byte[] data) { - int hashCode = Hash.FnvOffsetBias; + var hashCode = Hash.FnvOffsetBias; - for (int i = 0; i < data.Length; i++) + for (var i = 0; i < data.Length; i++) { hashCode = unchecked((hashCode ^ data[i]) * Hash.FnvPrime); } @@ -222,13 +222,13 @@ internal static int GetFNVHashCode(byte[] data) /// The FNV-1a hash of internal static int GetFNVHashCode(ReadOnlySpan data, out bool isAscii) { - int hashCode = Hash.FnvOffsetBias; + var hashCode = Hash.FnvOffsetBias; byte asciiMask = 0; - for (int i = 0; i < data.Length; i++) + for (var i = 0; i < data.Length; i++) { - byte b = data[i]; + var b = data[i]; asciiMask |= b; hashCode = unchecked((hashCode ^ b) * Hash.FnvPrime); } @@ -245,9 +245,9 @@ internal static int GetFNVHashCode(ReadOnlySpan data, out bool isAscii) /// The FNV-1a hash of internal static int GetFNVHashCode(ImmutableArray data) { - int hashCode = Hash.FnvOffsetBias; + var hashCode = Hash.FnvOffsetBias; - for (int i = 0; i < data.Length; i++) + for (var i = 0; i < data.Length; i++) { hashCode = unchecked((hashCode ^ data[i]) * Hash.FnvPrime); } @@ -314,7 +314,7 @@ internal static int GetFNVHashCode(string text) /// The FNV-1a hash code of internal static int GetFNVHashCode(System.Text.StringBuilder text) { - int hashCode = Hash.FnvOffsetBias; + var hashCode = Hash.FnvOffsetBias; #if NETCOREAPP3_1_OR_GREATER foreach (var chunk in text.GetChunks()) @@ -324,9 +324,9 @@ internal static int GetFNVHashCode(System.Text.StringBuilder text) #else // StringBuilder.GetChunks is not available in this target framework. Since there is no other direct access // to the underlying storage spans of StringBuilder, we fall back to using slower per-character operations. - int end = text.Length; + var end = text.Length; - for (int i = 0; i < end; i++) + for (var i = 0; i < end; i++) { hashCode = unchecked((hashCode ^ text[i]) * Hash.FnvPrime); } @@ -345,10 +345,10 @@ internal static int GetFNVHashCode(System.Text.StringBuilder text) /// The FNV-1a hash code of the substring beginning at and ending after characters. internal static int GetFNVHashCode(char[] text, int start, int length) { - int hashCode = Hash.FnvOffsetBias; - int end = start + length; + var hashCode = Hash.FnvOffsetBias; + var end = start + length; - for (int i = start; i < end; i++) + for (var i = start; i < end; i++) { hashCode = unchecked((hashCode ^ text[i]) * Hash.FnvPrime); } @@ -379,7 +379,7 @@ internal static int GetFNVHashCode(char ch) /// The result of combining with using the FNV-1a algorithm internal static int CombineFNVHash(int hashCode, string text) { - foreach (char ch in text) + foreach (var ch in text) { hashCode = unchecked((hashCode ^ ch) * Hash.FnvPrime); } @@ -408,7 +408,7 @@ internal static int CombineFNVHash(int hashCode, char ch) /// The result of combining with using the FNV-1a algorithm internal static int CombineFNVHash(int hashCode, ReadOnlySpan data) { - for (int i = 0; i < data.Length; i++) + for (var i = 0; i < data.Length; i++) { hashCode = unchecked((hashCode ^ data[i]) * Hash.FnvPrime); } diff --git a/src/Common/Utilities/Index.cs b/src/Common/Utilities/Index.cs index 2dff6f0b..25eaa621 100644 --- a/src/Common/Utilities/Index.cs +++ b/src/Common/Utilities/Index.cs @@ -102,7 +102,7 @@ public int Value [MethodImpl(MethodImplOptions.AggressiveInlining)] public int GetOffset(int length) { - int offset = _value; + var offset = _value; if (IsFromEnd) { // offset = length - (~value) diff --git a/src/Common/Utilities/PathUtilities.cs b/src/Common/Utilities/PathUtilities.cs index a11ee0bd..2b211726 100644 --- a/src/Common/Utilities/PathUtilities.cs +++ b/src/Common/Utilities/PathUtilities.cs @@ -41,7 +41,7 @@ public static string[] Split(string fullPath) public static bool EndsWithSeparator(this string path) { - char last = path[path.Length - 1]; + var last = path[path.Length - 1]; return last == Path.DirectorySeparatorChar || last == Path.AltDirectorySeparatorChar; } diff --git a/src/Common/Utilities/SequenceComparer.cs b/src/Common/Utilities/SequenceComparer.cs index 9ec6e0f6..2c4e2c85 100644 --- a/src/Common/Utilities/SequenceComparer.cs +++ b/src/Common/Utilities/SequenceComparer.cs @@ -24,7 +24,7 @@ public bool StartsWith(T[] sequence, T[] prefix) public int Compare(T[] left, int leftLength, T[] right, int rightLength) { var minLength = Math.Min(leftLength, rightLength); - for (int i = 0; i < minLength; i++) + for (var i = 0; i < minLength; i++) { var result = _comparer.Compare(left[i], right[i]); if (result != 0) diff --git a/src/Common/Utilities/UriUtilities.cs b/src/Common/Utilities/UriUtilities.cs index 2368f0be..dbd727a8 100644 --- a/src/Common/Utilities/UriUtilities.cs +++ b/src/Common/Utilities/UriUtilities.cs @@ -53,10 +53,10 @@ public static bool TrySplitRelativeUrl(string relativeUrl, [NotNullWhen(true)] o return false; } - int start = (relativeUrl[0] == '/') ? 1 : 0; + var start = (relativeUrl[0] == '/') ? 1 : 0; // optional trailing slash: - int end = relativeUrl.Length - 1; + var end = relativeUrl.Length - 1; if (relativeUrl[end] == '/') { end--; diff --git a/src/Microsoft.Build.Tasks.Git.UnitTests/GlobTests.cs b/src/Microsoft.Build.Tasks.Git.UnitTests/GlobTests.cs index 2601e817..f6398999 100644 --- a/src/Microsoft.Build.Tasks.Git.UnitTests/GlobTests.cs +++ b/src/Microsoft.Build.Tasks.Git.UnitTests/GlobTests.cs @@ -107,10 +107,10 @@ public void NonMatching(string pattern, string path) [InlineData("[a-]]", new char[0])] public void MatchingRange(string pattern, char[] matchingChars, char[]? matchingCharsWildCardMatchesSeparator = null) { - for (int i = 0; i < 255; i++) + for (var i = 0; i < 255; i++) { var c = (char)i; - bool shouldMatch = Array.IndexOf(matchingChars, c) >= 0; + var shouldMatch = Array.IndexOf(matchingChars, c) >= 0; Assert.True(shouldMatch == Glob.IsMatch(pattern, c.ToString(), ignoreCase: false, matchWildCardWithDirectorySeparator: false), $"character: '{(i != 0 ? c.ToString() : "\\0")}' (0x{i:X2})"); @@ -130,10 +130,10 @@ public void MatchingRange(string pattern, char[] matchingChars, char[]? matching [InlineData("[^--0]", new[] { '-', '.', '/', '0' })] // range contains '-', '.', '/', '0' public void NonMatchingRange(string pattern, char[] nonMatchingChars) { - for (int i = 0; i < 255; i++) + for (var i = 0; i < 255; i++) { var c = (char)i; - bool shouldMatch = Array.IndexOf(nonMatchingChars, c) < 0; + var shouldMatch = Array.IndexOf(nonMatchingChars, c) < 0; Assert.True(shouldMatch == Glob.IsMatch(pattern, c.ToString(), ignoreCase: false, matchWildCardWithDirectorySeparator: false), $"character: '{(i != 0 ? c.ToString() : "\\0")}' (0x{i:X2})"); @@ -146,10 +146,10 @@ public void NonMatchingRange(string pattern, char[] nonMatchingChars) [InlineData("[!]a-]", new[] { ']', 'a', '-', '/' })] public void NonMatchingRange_WildCardDoesNotMatchDirectorySeparator(string pattern, char[] nonMatchingChars) { - for (int i = 0; i < 255; i++) + for (var i = 0; i < 255; i++) { var c = (char)i; - bool shouldMatch = Array.IndexOf(nonMatchingChars, c) < 0; + var shouldMatch = Array.IndexOf(nonMatchingChars, c) < 0; Assert.True(shouldMatch == Glob.IsMatch(pattern, c.ToString(), ignoreCase: false, matchWildCardWithDirectorySeparator: false), $"character: '{(i != 0 ? c.ToString() : "\\0")}' (0x{i:X2})"); } @@ -159,10 +159,10 @@ public void NonMatchingRange_WildCardDoesNotMatchDirectorySeparator(string patte [InlineData("[!]a-]", new[] { ']', 'a', '-' })] public void NonMatchingRange_WildCardMatchesDirectorySeparator(string pattern, char[] nonMatchingChars) { - for (int i = 0; i < 255; i++) + for (var i = 0; i < 255; i++) { var c = (char)i; - bool shouldMatch = Array.IndexOf(nonMatchingChars, c) < 0; + var shouldMatch = Array.IndexOf(nonMatchingChars, c) < 0; Assert.True(shouldMatch == Glob.IsMatch(pattern, c.ToString(), ignoreCase: false, matchWildCardWithDirectorySeparator: true), $"character: '{(i != 0 ? c.ToString() : "\\0")}' (0x{i:X2})"); } @@ -174,10 +174,10 @@ public void NonMatchingRange_WildCardMatchesDirectorySeparator(string pattern, c [InlineData("[b-a]", new[] { 'b', 'B' })] public void MatchingRangeIgnoreCase(string pattern, char[] matchingChars) { - for (int i = 0; i < 255; i++) + for (var i = 0; i < 255; i++) { var c = (char)i; - bool shouldMatch = Array.IndexOf(matchingChars, c) >= 0; + var shouldMatch = Array.IndexOf(matchingChars, c) >= 0; Assert.True(shouldMatch == Glob.IsMatch(pattern, c.ToString(), ignoreCase: true, matchWildCardWithDirectorySeparator: false), $"character: '{(i != 0 ? c.ToString() : "\\0")}' (0x{i:X2})"); diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs index a7ad5266..2ffa39ad 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs @@ -221,14 +221,14 @@ internal void LoadVariablesFrom(string path, Dictionary DirectoryIgnoreStateCache } // git uses the FS case-sensitivity for checking directory existence: - bool isDirectoryPath = PathUtils.HasTrailingDirectorySeparator(fullPath) || Directory.Exists(fullPath); + var isDirectoryPath = PathUtils.HasTrailingDirectorySeparator(fullPath) || Directory.Exists(fullPath); var fullPathNoSlash = PathUtils.TrimTrailingSlash(PathUtils.ToPosixPath(Path.GetFullPath(fullPath))); if (isDirectoryPath && fullPathNoSlash.Equals(Ignore._workingDirectoryNoSlash, Ignore.PathComparison)) @@ -164,7 +164,7 @@ private bool IsIgnoredRecursive(string normalizedPosixPath, bool isDirectoryPath private static void SplitPath(string fullPath, out string? directoryWithSlash, out string fileName) { Debug.Assert(!PathUtils.HasTrailingSlash(fullPath)); - int i = fullPath.LastIndexOf('/'); + var i = fullPath.LastIndexOf('/'); if (i < 0) { directoryWithSlash = null; @@ -185,7 +185,7 @@ private bool IsIgnored(string normalizedPosixPath, string directory, string file return true; } - bool isIgnored = false; + var isIgnored = false; // Visit groups in reverse order. // Patterns specified closer to the target file override those specified above. @@ -196,7 +196,7 @@ private bool IsIgnored(string normalizedPosixPath, string directory, string file groups.Add(patternGroup); } - for (int i = groups.Count - 1; i >= 0; i--) + for (var i = groups.Count - 1; i >= 0; i--) { var patternGroup = groups[i]; @@ -221,7 +221,7 @@ private bool IsIgnored(string normalizedPosixPath, string directory, string file continue; } - string matchPath = pattern.IsFullPathPattern ? + var matchPath = pattern.IsFullPathPattern ? lazyRelativePath ??= normalizedPosixPath.Substring(patternGroup.ContainingDirectory.Length) : fileName; diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs index 0a888e3a..0dcea7ab 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs @@ -155,7 +155,7 @@ internal static bool TryParsePattern(string line, StringBuilder reusableBuffer, // Trailing spaces are ignored unless '\'-escaped. // Leading spaces are significant. // Other whitespace (\t, \v, \f) is significant. - int e = line.Length - 1; + var e = line.Length - 1; while (e >= 0 && line[e] == ' ') { e--; @@ -175,7 +175,7 @@ internal static bool TryParsePattern(string line, StringBuilder reusableBuffer, e++; } - int s = 0; + var s = 0; // Skip comment. if (line[s] == '#') @@ -221,7 +221,7 @@ internal static bool TryParsePattern(string line, StringBuilder reusableBuffer, return false; } - int escape = line.IndexOf('\\', s, e - s); + var escape = line.IndexOf('\\', s, e - s); if (escape < 0) { glob = line.Substring(s, e - s); @@ -231,7 +231,7 @@ internal static bool TryParsePattern(string line, StringBuilder reusableBuffer, reusableBuffer.Clear(); reusableBuffer.Append(line, s, escape - s); - int i = escape; + var i = escape; while (i < e) { var c = line[i++]; diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs index 7d970c09..aac23c79 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs @@ -106,7 +106,7 @@ internal static ImmutableDictionary ReadPackedReferences(TextRea continue; } - int separator = line.IndexOfAny(CharUtils.WhitespaceSeparators); + var separator = line.IndexOfAny(CharUtils.WhitespaceSeparators); if (separator == -1) { throw invalidData(); @@ -118,7 +118,7 @@ internal static ImmutableDictionary ReadPackedReferences(TextRea throw invalidData(); } - int nextSeparator = line.IndexOfAny(CharUtils.WhitespaceSeparators, separator + 1); + var nextSeparator = line.IndexOfAny(CharUtils.WhitespaceSeparators, separator + 1); var reference = (nextSeparator >= 0) ? line.Substring(separator + 1, nextSeparator - separator - 1) : line.Substring(separator + 1); if (reference.Length == 0) @@ -155,7 +155,7 @@ internal static ImmutableDictionary ReadPackedReferences(TextRea public string? GetBranchForHead() { - string reference = ReadReferenceFromFile(Path.Combine(_gitDirectory, GitRepository.GitHeadFileName)); + var reference = ReadReferenceFromFile(Path.Combine(_gitDirectory, GitRepository.GitHeadFileName)); return TryGetReferenceName(reference, out var name) ? name : null; } diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs index fc7446ea..d0f6c5ab 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs @@ -125,7 +125,7 @@ public static GitRepository OpenRepository(GitRepositoryLocation location, GitEn var workingDirectory = GetWorkingDirectory(config, location); // See https://github.com/git/git/blob/master/Documentation/technical/repository-version.txt - string? versionStr = config.GetVariableValue("core", "repositoryformatversion"); + var versionStr = config.GetVariableValue("core", "repositoryformatversion"); if (GitConfig.TryParseInt64Value(versionStr, out var version) && version > SupportedGitRepoFormatVersion) { throw new NotSupportedException(string.Format(Resources.UnsupportedRepositoryVersion, versionStr, SupportedGitRepoFormatVersion)); @@ -154,7 +154,7 @@ public static GitRepository OpenRepository(GitRepositoryLocation location, GitEn // Working directory can be overridden by a config option. // See https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreworktree - string? value = config.GetVariableValue("core", "worktree"); + var value = config.GetVariableValue("core", "worktree"); if (value != null) { // git does not expand home dir relative path ("~/") @@ -319,7 +319,7 @@ void reportDiagnostic(string diagnostic) GroupBy(kvp => kvp.Key.SubsectionName, GitVariableName.SubsectionNameComparer). OrderBy(group => group.Key)) { - string name = group.Key; + var name = group.Key; string? url = null; string? path = null; diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/Glob.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/Glob.cs index ea6e0e59..6ccc146a 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/Glob.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/Glob.cs @@ -19,18 +19,18 @@ internal static class Glob { internal static bool IsMatch(string pattern, string path, bool ignoreCase, bool matchWildCardWithDirectorySeparator) { - int patternIndex = 0; - int pathIndex = 0; + var patternIndex = 0; + var pathIndex = 0; // true if the next matching character must be the first character of a directory name - bool matchDirectoryNameStart = false; + var matchDirectoryNameStart = false; - bool stopAtPathSlash = false; + var stopAtPathSlash = false; - int nextSinglePatternIndex = -1; - int nextSinglePathIndex = -1; - int nextDoublePatternIndex = -1; - int nextDoublePathIndex = -1; + var nextSinglePatternIndex = -1; + var nextSinglePathIndex = -1; + var nextDoublePatternIndex = -1; + var nextDoublePathIndex = -1; bool equal(char x, char y) => x == y || ignoreCase && char.ToLowerInvariant(x) == char.ToLowerInvariant(y); @@ -42,7 +42,7 @@ bool equal(char x, char y) { // "a/**/*" does not match "a", although it might appear from the spec that it should. - bool isDoubleAsterisk = patternIndex < pattern.Length && pattern[patternIndex] == '*' && + var isDoubleAsterisk = patternIndex < pattern.Length && pattern[patternIndex] == '*' && (patternIndex == pattern.Length - 1 || pattern[patternIndex + 1] == '/') && (patternIndex == 1 || pattern[patternIndex - 2] == '/'); @@ -200,9 +200,9 @@ private static bool IsRangeMatch(string pattern, ref int patternIndex, char path pathChar = char.ToLowerInvariant(pathChar); } - bool negate = false; - bool isEmpty = true; - bool isMatching = false; + var negate = false; + var isEmpty = true; + var isMatching = false; var c = pattern[patternIndex]; if (c is '!' or '^') diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/PathUtils.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/PathUtils.cs index 8ff2dd1d..9e70d6d5 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/PathUtils.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/PathUtils.cs @@ -51,7 +51,7 @@ public static string CombinePaths(string root, string relativePath, string separ { Debug.Assert(!string.IsNullOrEmpty(root)); - char c = root[root.Length - 1]; + var c = root[root.Length - 1]; if (!IsDirectorySeparator(c) && c != VolumeSeparatorChar) { return root + separator + relativePath; diff --git a/src/Microsoft.Build.Tasks.Git/GitOperations.cs b/src/Microsoft.Build.Tasks.Git/GitOperations.cs index cc0301ae..68973c0d 100644 --- a/src/Microsoft.Build.Tasks.Git/GitOperations.cs +++ b/src/Microsoft.Build.Tasks.Git/GitOperations.cs @@ -116,7 +116,7 @@ internal static string ApplyInsteadOfUrlMapping(GitConfig config, string url) // - URL prefix matching is case sensitive. // - if the replacement is empty the URL is prefixed with the replacement string - int longestPrefixLength = -1; + var longestPrefixLength = -1; string? replacement = null; foreach (var variable in config.Variables) @@ -215,7 +215,7 @@ private static bool TryParseScp(string value, [NotNullWhen(true)]out Uri? uri) { uri = null; - int colon = value.IndexOf(':'); + var colon = value.IndexOf(':'); if (colon == -1) { return false; @@ -250,8 +250,8 @@ public static ITaskItem[] GetSourceRoots(GitRepository repository, string? remot if (revisionId != null) { // Don't report a warning since it has already been reported by GetRepositoryUrl task. - string? repositoryUrl = GetRepositoryUrl(repository, remoteName, logWarning: null); - string? branchName = repository.GetBranchName(); + var repositoryUrl = GetRepositoryUrl(repository, remoteName, logWarning: null); + var branchName = repository.GetBranchName(); // Item metadata are stored msbuild-escaped. GetMetadata unescapes, SetMetadata stores the value as specified. // Escape msbuild special characters so that URL escapes in the URL are preserved when the URL is read by GetMetadata. @@ -401,9 +401,9 @@ private static void AddTreeNode(DirectoryNode root, string workingDirectory, Laz var node = root; - for (int i = 0; i < segments.Length; i++) + for (var i = 0; i < segments.Length; i++) { - int index = node.FindChildIndex(segments[i]); + var index = node.FindChildIndex(segments[i]); if (index >= 0) { node = node.OrderedChildren[index]; @@ -432,9 +432,9 @@ private static void AddTreeNode(DirectoryNode root, string workingDirectory, Laz GitIgnore.Matcher? containingRepositoryMatcher = null; var node = root; - for (int i = 0; i < segments.Length - 1; i++) + for (var i = 0; i < segments.Length - 1; i++) { - int index = node.FindChildIndex(segments[i]); + var index = node.FindChildIndex(segments[i]); if (index < 0) { break; diff --git a/src/SourceLink.AzureDevOpsServer.Git.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.AzureDevOpsServer.Git.UnitTests/GetSourceLinkUrlTests.cs index bb5fec9a..52afc675 100644 --- a/src/SourceLink.AzureDevOpsServer.Git.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.AzureDevOpsServer.Git.UnitTests/GetSourceLinkUrlTests.cs @@ -22,7 +22,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkAzureDevOpsServerGitHost", "AzureDevOpsServer.Git"), engine.Log); @@ -45,7 +45,7 @@ public void BadUrl() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValueOfWithIdentityIsInvalid, "SourceRoot.RepositoryUrl", "/src/", "http://tfs.com/tfs/zzz"), engine.Log); @@ -73,7 +73,7 @@ public void BadUrl_NotMatchingToVirtualDirectory(string url, string virtualDirec } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValueOfWithIdentityIsInvalid, "SourceRoot.RepositoryUrl", "/src/", url), engine.Log); @@ -94,7 +94,7 @@ public void ImplicitHostNotSupported() RepositoryUrl = "http://subdomain.tfs.com:100/tfs/collection/project/_git/repo" }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkAzureDevOpsServerGitHost", "AzureDevOpsServer.Git"), engine.Log); @@ -121,7 +121,7 @@ public void BuildSourceLinkUrl(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/collection/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -150,7 +150,7 @@ public void DefaultContentUrl(string virtualDirectory, string localPath) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"http://contoso.com{localPath}collection/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -171,7 +171,7 @@ public void VirtualDirectory_Collection() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://contoso.com:8080/tfs/collection/repo/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -192,7 +192,7 @@ public void VirtualDirectory_Collection_Project() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://contoso.com:8080/tfs/collection/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -213,7 +213,7 @@ public void VirtualDirectory_Collection_Project_Team() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://contoso.com:8080/tfs/collection/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -234,7 +234,7 @@ public void VirtualDirectory_Collection_Project_Team_Option() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://contoso.com:8080/tfs/collection/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.AzureDevOpsServer.Git.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.AzureDevOpsServer.Git.UnitTests/TranslateRepositoryUrlsTests.cs index 8e9b3f5f..bf13bc46 100644 --- a/src/SourceLink.AzureDevOpsServer.Git.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.AzureDevOpsServer.Git.UnitTests/TranslateRepositoryUrlsTests.cs @@ -35,7 +35,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); // SSH translation does not need virtual directory diff --git a/src/SourceLink.AzureRepos.Git.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.AzureRepos.Git.UnitTests/GetSourceLinkUrlTests.cs index a84eb067..97d10d83 100644 --- a/src/SourceLink.AzureRepos.Git.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.AzureRepos.Git.UnitTests/GetSourceLinkUrlTests.cs @@ -22,7 +22,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkAzureReposGitHost", "AzureRepos.Git"), engine.Log); @@ -49,7 +49,7 @@ public void BuildSourceLinkUrl(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/account/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -70,7 +70,7 @@ public void BadUrl(string domainAndAccount, string host) Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); // ERROR : The value of SourceRoot.RepositoryUrl with identity '/src/' is invalid: 'http://account.visualstudio.com/_git'"" AssertEx.AssertEqualToleratingWhitespaceDifferences( @@ -94,7 +94,7 @@ public void RepoOnly(string domainAndAccount, string host) Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"http://{domainAndAccount}/repo/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -115,7 +115,7 @@ public void Project(string domainAndAccount, string host) Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domainAndAccount}/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -135,7 +135,7 @@ public void Project_Team(string domainAndAccount, string host) Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domainAndAccount}/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -153,7 +153,7 @@ public void Project_Team_NonVisualStudioHost() Hosts = new[] { new MockItem("contoso.com") } }; - bool result = task.Execute(); + var result = task.Execute(); // ERROR : The value of SourceRoot.RepositoryUrl with identity '/src/' is invalid: 'http://contoso.com/account/project/team/_git/repo'"" AssertEx.AssertEqualToleratingWhitespaceDifferences( @@ -176,7 +176,7 @@ public void VisualStudioHost_DefaultCollection(string domain, string host) Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domain}/repo/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); @@ -197,7 +197,7 @@ public void VisualStudioHost_DefaultCollection_Project(string domain, string hos Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domain}/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -217,7 +217,7 @@ public void VisualStudioHost_DefaultCollection_Project_Team(string domain, strin Hosts = new[] { new MockItem(host) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domain}/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -238,7 +238,7 @@ public void VisualStudioHost_ImplicitHost_DeafultCollection(string domain) RepositoryUrl = $"https://{domain}/DefaultCollection/project/_git/repo" }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domain}/repo/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -259,7 +259,7 @@ public void VisualStudioHost_ImplicitHost_DeafultCollection_Project(string domai RepositoryUrl = $"https://{domain}/DefaultCollection/project/_git/repo" }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domain}/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); @@ -280,7 +280,7 @@ public void VisualStudioHost_ImplicitHost_DeafultCollection_Project_Team(string RepositoryUrl = $"https://{domain}/DefaultCollection/project/_git/repo" }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://{domain}/project/_apis/git/repositories/repo/items?api-version=1.0&versionType=commit&version=0123456789abcdefABCDEF000000000000000000&path=/*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.AzureRepos.Git.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.AzureRepos.Git.UnitTests/TranslateRepositoryUrlsTests.cs index 5ad83c5d..e2761321 100644 --- a/src/SourceLink.AzureRepos.Git.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.AzureRepos.Git.UnitTests/TranslateRepositoryUrlsTests.cs @@ -40,7 +40,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://account.visualstudio.com/project/team/_git/repo", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs b/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs index fd8b6b5f..df08128d 100644 --- a/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs +++ b/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs @@ -58,10 +58,10 @@ bool parse(string urls) return false; } - for (int i = 0; i < items.Length; i += 2) + for (var i = 0; i < items.Length; i += 2) { - string originalUrl = items[i]; - string mappedUrl = items[i + 1]; + var originalUrl = items[i]; + var mappedUrl = items[i + 1]; if (!Uri.TryCreate(originalUrl, UriKind.Absolute, out var originalUri) || originalUri.Query != "") { @@ -86,7 +86,7 @@ bool parse(string urls) IEnumerable> enumerateVariables() { - int i = 0; + var i = 0; while (true) { var name = UrlMapEnvironmentVariableName + (i == 0 ? "" : i.ToString()); diff --git a/src/SourceLink.Bitbucket.Git.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.Bitbucket.Git.UnitTests/GetSourceLinkUrlTests.cs index 9f3aa41d..901882cc 100644 --- a/src/SourceLink.Bitbucket.Git.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.Bitbucket.Git.UnitTests/GetSourceLinkUrlTests.cs @@ -23,7 +23,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkBitbucketGitHost", "Bitbucket.Git"), engine.Log); @@ -76,7 +76,7 @@ public void BuildSourceLinkUrl_BitbucketCloud(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://api.domain.com/x/y/2.0/repositories/a/b/src/0123456789abcdefABCDEF000000000000000000/*", task.SourceLinkUrl); Assert.True(result); @@ -96,7 +96,7 @@ public void BuildSourceLinkUrl_BitbucketEnterprise_PersonalToken() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.domain.tools/projects/abc/repos/project1/raw/*?at=0123456789abcdefABCDEF000000000000000000", task.SourceLinkUrl); Assert.True(result); @@ -116,7 +116,7 @@ public void BuildSourceLinkUrl_BitbucketEnterprise_InvalidUrl() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValueOfWithIdentityIsInvalid, "SourceRoot.RepositoryUrl", "/src/", "http://subdomain.mybitbucket.org/a"), engine.Log); @@ -139,7 +139,7 @@ public void BuildSourceLinkUrl_MetadataWithEnterpriseEditionButWithoutVersion_Us } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.domain.com/projects/a/repos/b/raw/*?at=0123456789abcdefABCDEF000000000000000000", task.SourceLinkUrl); Assert.True(result); @@ -169,7 +169,7 @@ public void BuildSourceLinkUrl_BitbucketEnterpriseOldVersionSsh(string s1, strin } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.domain.com/projects/a/repos/b/browse/*?at=0123456789abcdefABCDEF000000000000000000&raw", task.SourceLinkUrl); Assert.True(result); @@ -199,7 +199,7 @@ public void BuildSourceLinkUrl_BitbucketEnterpriseOldVersionHttps(string s1, str } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.domain.com/base/projects/a/repos/b/browse/*?at=0123456789abcdefABCDEF000000000000000000&raw", task.SourceLinkUrl); Assert.True(result); @@ -230,7 +230,7 @@ public void BuildSourceLinkUrl_BitbucketEnterpriseNewVersionSsh(string s1, strin } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.domain.com/projects/a/repos/b/raw/*?at=0123456789abcdefABCDEF000000000000000000", task.SourceLinkUrl); Assert.True(result); @@ -261,7 +261,7 @@ public void BuildSourceLinkUrl_BitbucketEnterpriseNewVersionHttps(string s1, str } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.domain.com/projects/a/repos/b/raw/*?at=0123456789abcdefABCDEF000000000000000000", task.SourceLinkUrl); Assert.True(result); @@ -283,7 +283,7 @@ public void BuildSourceLinkUrl_IncorrectVersionForEnterpriseEdition_ERROR() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ItemOfItemGroupMustSpecifyMetadata, "domain.com", "SourceLinkBitbucketGitHost", "Version"), engine.Log); diff --git a/src/SourceLink.Bitbucket.Git.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.Bitbucket.Git.UnitTests/TranslateRepositoryUrlsTests.cs index 4d3f9bfd..0bdf06ee 100644 --- a/src/SourceLink.Bitbucket.Git.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.Bitbucket.Git.UnitTests/TranslateRepositoryUrlsTests.cs @@ -33,7 +33,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://bitbucket.org/a/b", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.Bitbucket.Git/GetSourceLinkUrl.cs b/src/SourceLink.Bitbucket.Git/GetSourceLinkUrl.cs index 33c76bfd..fec2dd8e 100644 --- a/src/SourceLink.Bitbucket.Git/GetSourceLinkUrl.cs +++ b/src/SourceLink.Bitbucket.Git/GetSourceLinkUrl.cs @@ -28,7 +28,7 @@ public sealed class GetSourceLinkUrl : GetSourceLinkUrlGitTask { // The SourceLinkBitbucketGitHost item for bitbucket.org specifies EnterpriseEdition="false". // Other items that may be specified by the project default to EnterpriseEdition="true" without specifying it. - bool isCloud = bool.TryParse(hostItem?.GetMetadata(IsEnterpriseEditionMetadataName), out var isEnterpriseEdition) && !isEnterpriseEdition; + var isCloud = bool.TryParse(hostItem?.GetMetadata(IsEnterpriseEditionMetadataName), out var isEnterpriseEdition) && !isEnterpriseEdition; if (isCloud) { @@ -109,7 +109,7 @@ private static string BuildSourceLinkUrlForCloudEdition(Uri contentUri, string r UriBuilder apiUriBuilder = new UriBuilder(contentUri); apiUriBuilder.Host = $"api.{apiUriBuilder.Host}"; - string relativeApiUrl = UriUtilities.Combine(UriUtilities.Combine("2.0/repositories", relativeUrl), $"src/{revisionId}/*"); + var relativeApiUrl = UriUtilities.Combine(UriUtilities.Combine("2.0/repositories", relativeUrl), $"src/{revisionId}/*"); return UriUtilities.Combine(apiUriBuilder.Uri.ToString(), relativeApiUrl); } diff --git a/src/SourceLink.Common.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.Common.UnitTests/GetSourceLinkUrlTests.cs index 295798d9..dfe0627a 100644 --- a/src/SourceLink.Common.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.Common.UnitTests/GetSourceLinkUrlTests.cs @@ -46,7 +46,7 @@ public void HostsDomain_Errors(string domain) Hosts = new[] { new MockItem(domain) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValuePassedToTaskParameterNotValidDomainName, "Hosts", domain), engine.Log); @@ -69,7 +69,7 @@ public void ImplicitHost_Errors(string repositoryUrl) IsSingleProvider = true, }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValuePassedToTaskParameterNotValidUri, "RepositoryUrl", repositoryUrl), engine.Log); @@ -91,7 +91,7 @@ public void ImplicitHost_Local(string repositoryUrl) IsSingleProvider = true, }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValuePassedToTaskParameterNotValidHostUri, "RepositoryUrl", repositoryUrl), engine.Log); @@ -117,7 +117,7 @@ public void HostsContentUrl_Errors(string url) Hosts = new[] { new MockItem("abc.com", KVP("ContentUrl", url)) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValuePassedToTaskParameterNotValidHostUri, "Hosts", url), engine.Log); @@ -138,7 +138,7 @@ public void RepositoryUrl_Errors(string url) SourceRoot = new MockItem("/src/", KVP("RepositoryUrl", url), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValueOfWithIdentityIsInvalid, "SourceRoot.RepositoryUrl", "/src/", url), engine.Log); @@ -164,7 +164,7 @@ public void RevisionId_Errors(string revisionId) Hosts = new[] { new MockItem("contoso.com", KVP("ContentUrl", "https://contoso.com")) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.ValueOfWithIdentityIsNotValidCommitHash, "SourceRoot.RevisionId", "/src/", revisionId), engine.Log); @@ -184,7 +184,7 @@ public void SourceRootNotApplicable_SourceControlNotGit() Hosts = new[] { new MockItem("contoso.com", KVP("ContentUrl", "https://contoso.com")) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); Assert.Equal("N/A", task.SourceLinkUrl); Assert.True(result); @@ -202,7 +202,7 @@ public void SourceRootNotApplicable_SourceLinkUrlSet() Hosts = new[] { new MockItem("github.com", KVP("ContentUrl", "https://contoso.com")) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); Assert.Equal("N/A", task.SourceLinkUrl); Assert.True(result); @@ -219,7 +219,7 @@ public void SourceRootNotApplicable_SourceLinkUrlEmpty() SourceRoot = new MockItem("x", KVP("RepositoryUrl", ""), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "WARNING : " + string.Format(CommonResources.UnableToDetermineRepositoryUrl), engine.Log); @@ -244,7 +244,7 @@ public void SourceRootNotApplicable_RepositoryUrlNotMatchingHost() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); Assert.Equal("N/A", task.SourceLinkUrl); Assert.True(result); @@ -265,7 +265,7 @@ public void CustomHosts_PortWithDefaultContentUrl() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='http://contoso.com:1234/host-default' GitUrl='http://subdomain.contoso.com:1234/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -284,7 +284,7 @@ public void ImplicitHost_PortWithDefaultContentUrl() IsSingleProvider = true, }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='http://contoso.com:1234/repo-default' GitUrl='http://subdomain.contoso.com:1234/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -305,7 +305,7 @@ public void CustomHosts_PortWithNonDefaultContentUrl() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://othercontoso.com/' GitUrl='http://subdomain.contoso.com:1234/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -330,7 +330,7 @@ public void CustomHosts_Matching1() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://subdomain.contoso.com1:777/' GitUrl='http://subdomain.contoso.com:1234/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -357,7 +357,7 @@ public void CustomHosts_Matching2() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); // explicit host is preferred over the implicit one @@ -385,7 +385,7 @@ public void CustomHosts_Matching3() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://domain.com:4/' GitUrl='http://subdomain.contoso.com:100/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -411,7 +411,7 @@ public void CustomHosts_Matching4() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://domain.com:2/' GitUrl='http://subdomain.contoso.com:123/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -437,7 +437,7 @@ public void CustomHosts_Matching5() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://domain.com:1/' GitUrl='http://subdomain.contoso.com:100/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -460,7 +460,7 @@ public void CustomHosts_Matching6() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://zzz.com/' GitUrl='http://subdomain.contoso.com/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -483,7 +483,7 @@ public void CustomHosts_DefaultPortHttp() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://domain.com:1/' GitUrl='http://subdomain.contoso.com/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -506,7 +506,7 @@ public void CustomHosts_DefaultPortHttps() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='https://domain.com:2/' GitUrl='https://subdomain.contoso.com/a/b' RelativeUrl='/a/b' RevisionId='0123456789abcdefABCDEF000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -524,7 +524,7 @@ public void TrimDotGit() Hosts = new[] { new MockItem("contoso.com") } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='http://contoso.com/host-default' GitUrl='http://contoso.com/a/b.git' RelativeUrl='/a/b' RevisionId='0000000000000000000000000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -542,7 +542,7 @@ public void TrimmingGitIsCaseSensitive() Hosts = new[] { new MockItem("contoso.com") } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='http://contoso.com/host-default' GitUrl='http://contoso.com/a/b.GIT' RelativeUrl='/a/b.GIT' RevisionId='0000000000000000000000000000000000000000'", task.SourceLinkUrl); Assert.True(result); @@ -560,7 +560,7 @@ public void TrimmingGitOnlyWhenSuffix() Hosts = new[] { new MockItem("contoso.com") } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ContentUrl='http://contoso.com/host-default' GitUrl='http://contoso.com/a/.git' RelativeUrl='/a/.git' RevisionId='0000000000000000000000000000000000000000'", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.Common.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.Common.UnitTests/TranslateRepositoryUrlsTests.cs index 0bf9a2dd..0eecf217 100644 --- a/src/SourceLink.Common.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.Common.UnitTests/TranslateRepositoryUrlsTests.cs @@ -36,7 +36,7 @@ public void NoValidHosts() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( $""" WARNING : {string.Format(CommonResources.IgnoringInvalidHostName, "http://contoso.com")} @@ -93,7 +93,7 @@ public void Translate(string name) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual($"https://contoso.com/{outputRelativeUrl}", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.Common.UnitTests/UriUtilitiesTests.cs b/src/SourceLink.Common.UnitTests/UriUtilitiesTests.cs index ebd428ae..3bcac04d 100644 --- a/src/SourceLink.Common.UnitTests/UriUtilitiesTests.cs +++ b/src/SourceLink.Common.UnitTests/UriUtilitiesTests.cs @@ -42,7 +42,7 @@ public void UrlStartsWith(string url, string prefix, bool expected) [InlineData("/a/b//", null)] public void TrySplitRelativeUrl(string url, string[]? parts) { - if (!UriUtilities.TrySplitRelativeUrl(url, out string[]? actualParts)) + if (!UriUtilities.TrySplitRelativeUrl(url, out var actualParts)) { actualParts = null; } diff --git a/src/SourceLink.Common/GenerateSourceLinkFile.cs b/src/SourceLink.Common/GenerateSourceLinkFile.cs index 859cf0d6..490be432 100644 --- a/src/SourceLink.Common/GenerateSourceLinkFile.cs +++ b/src/SourceLink.Common/GenerateSourceLinkFile.cs @@ -44,13 +44,13 @@ static string jsonEscape(string str) var result = new StringBuilder(); result.Append("{\"documents\":{"); - bool success = true; - bool isEmpty = true; + var success = true; + var isEmpty = true; foreach (var root in SourceRoots) { - string mappedPath = root.GetMetadata(Names.SourceRoot.MappedPath); - bool isMapped = !string.IsNullOrEmpty(mappedPath); - string localPath = isMapped ? mappedPath : root.ItemSpec; + var mappedPath = root.GetMetadata(Names.SourceRoot.MappedPath); + var isMapped = !string.IsNullOrEmpty(mappedPath); + var localPath = isMapped ? mappedPath : root.ItemSpec; if (!localPath.EndsWithSeparator()) { diff --git a/src/SourceLink.GitHub.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.GitHub.UnitTests/GetSourceLinkUrlTests.cs index d91ad538..41e3ba27 100644 --- a/src/SourceLink.GitHub.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.GitHub.UnitTests/GetSourceLinkUrlTests.cs @@ -21,7 +21,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkGitHubHost", "GitHub"), engine.Log); @@ -48,7 +48,7 @@ public void BuildSourceLinkUrl(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/a/b/0123456789abcdefABCDEF000000000000000000/*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.GitHub.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.GitHub.UnitTests/TranslateRepositoryUrlsTests.cs index 85aac344..bb23a571 100644 --- a/src/SourceLink.GitHub.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.GitHub.UnitTests/TranslateRepositoryUrlsTests.cs @@ -33,7 +33,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://github.com/a/b", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.GitLab.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.GitLab.UnitTests/GetSourceLinkUrlTests.cs index 2e3ae69b..f183ee50 100644 --- a/src/SourceLink.GitLab.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.GitLab.UnitTests/GetSourceLinkUrlTests.cs @@ -21,7 +21,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkGitLabHost", "GitLab"), engine.Log); @@ -54,7 +54,7 @@ public void BuildSourceLinkUrl(string s1, string s2, string? version) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/a/b/-/raw/0123456789abcdefABCDEF000000000000000000/*", task.SourceLinkUrl); Assert.True(result); @@ -78,7 +78,7 @@ public void BuildSourceLinkUrl_DeprecatedVersion(string s1, string s2, string ve } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/a/b/raw/0123456789abcdefABCDEF000000000000000000/*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.GitLab.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.GitLab.UnitTests/TranslateRepositoryUrlsTests.cs index 75caf89d..56a447c0 100644 --- a/src/SourceLink.GitLab.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.GitLab.UnitTests/TranslateRepositoryUrlsTests.cs @@ -33,7 +33,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://gitlab.com/a/b", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.GitWeb.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.GitWeb.UnitTests/GetSourceLinkUrlTests.cs index 67000094..a46d51ea 100644 --- a/src/SourceLink.GitWeb.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.GitWeb.UnitTests/GetSourceLinkUrlTests.cs @@ -21,7 +21,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkGitWebHost", "GitWeb"), engine.Log); @@ -48,7 +48,7 @@ public void BuildSourceLinkUrl(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://src.intranet.company.com/gitweb/?p=root_dir_name/sub_dirs/reponame.git;a=blob_plain;hb=0123456789abcdefABCDEF000000000000000000;f=*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.GitWeb.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.GitWeb.UnitTests/TranslateRepositoryUrlsTests.cs index ac62ba4f..bd220e3f 100644 --- a/src/SourceLink.GitWeb.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.GitWeb.UnitTests/TranslateRepositoryUrlsTests.cs @@ -33,7 +33,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("ssh://git@src.intranet.company.com/root_dir_name/sub_dirs/reponame.git", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.Gitea.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.Gitea.UnitTests/GetSourceLinkUrlTests.cs index 98cab915..61175496 100644 --- a/src/SourceLink.Gitea.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.Gitea.UnitTests/GetSourceLinkUrlTests.cs @@ -21,7 +21,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkGiteaHost", "Gitea"), engine.Log); @@ -48,7 +48,7 @@ public void BuildSourceLinkUrl(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/a/b/raw/commit/0123456789abcdefABCDEF000000000000000000/*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.Gitea.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.Gitea.UnitTests/TranslateRepositoryUrlsTests.cs index 6578d097..0f883356 100644 --- a/src/SourceLink.Gitea.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.Gitea.UnitTests/TranslateRepositoryUrlsTests.cs @@ -33,7 +33,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://gitea.com/a/b", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.Gitee.UnitTests/GetSourceLinkUrlTests.cs b/src/SourceLink.Gitee.UnitTests/GetSourceLinkUrlTests.cs index f8886afc..c4384858 100644 --- a/src/SourceLink.Gitee.UnitTests/GetSourceLinkUrlTests.cs +++ b/src/SourceLink.Gitee.UnitTests/GetSourceLinkUrlTests.cs @@ -21,7 +21,7 @@ public void EmptyHosts() SourceRoot = new MockItem("x", KVP("RepositoryUrl", "http://abc.com"), KVP("SourceControl", "git")), }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences( "ERROR : " + string.Format(CommonResources.AtLeastOneRepositoryHostIsRequired, "SourceLinkGiteeHost", "Gitee"), engine.Log); @@ -48,7 +48,7 @@ public void BuildSourceLinkUrl(string s1, string s2) } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://domain.com/x/y/a/b/raw/0123456789abcdefABCDEF000000000000000000/*", task.SourceLinkUrl); Assert.True(result); diff --git a/src/SourceLink.Gitee.UnitTests/TranslateRepositoryUrlsTests.cs b/src/SourceLink.Gitee.UnitTests/TranslateRepositoryUrlsTests.cs index d45dc400..9bceaa0d 100644 --- a/src/SourceLink.Gitee.UnitTests/TranslateRepositoryUrlsTests.cs +++ b/src/SourceLink.Gitee.UnitTests/TranslateRepositoryUrlsTests.cs @@ -33,7 +33,7 @@ public void Translate() } }; - bool result = task.Execute(); + var result = task.Execute(); AssertEx.AssertEqualToleratingWhitespaceDifferences("", engine.Log); AssertEx.AreEqual("https://gitee.com/a/b", task.TranslatedRepositoryUrl); diff --git a/src/SourceLink.Tools/SourceLinkMap.cs b/src/SourceLink.Tools/SourceLinkMap.cs index 1218c9c4..4323d228 100644 --- a/src/SourceLink.Tools/SourceLinkMap.cs +++ b/src/SourceLink.Tools/SourceLinkMap.cs @@ -141,7 +141,7 @@ private static bool TryParseEntry(string key, string value, out Entry entry) return false; } - int filePathStar = key.IndexOf('*'); + var filePathStar = key.IndexOf('*'); if (filePathStar == key.Length - 1) { key = key.Substring(0, filePathStar); @@ -152,7 +152,7 @@ private static bool TryParseEntry(string key, string value, out Entry entry) } string uriPrefix, uriSuffix; - int uriStar = value.IndexOf('*'); + var uriStar = value.IndexOf('*'); if (uriStar >= 0) { if (filePathStar < 0) diff --git a/src/TestUtilities/AssertEx.cs b/src/TestUtilities/AssertEx.cs index 38503ef9..b01d0e26 100644 --- a/src/TestUtilities/AssertEx.cs +++ b/src/TestUtilities/AssertEx.cs @@ -90,8 +90,8 @@ bool IEqualityComparer.Equals([AllowNull] T x, [AllowNull] T y) while (true) { - bool hasNextX = enumeratorX.MoveNext(); - bool hasNextY = enumeratorY.MoveNext(); + var hasNextX = enumeratorX.MoveNext(); + var hasNextY = enumeratorY.MoveNext(); if (!hasNextX || !hasNextY) { @@ -192,7 +192,7 @@ public static void Equal(IEnumerable? expected, IEnumerable? actual, Fu } else if (!SequenceEqual(expected, actual, comparer)) { - string assertMessage = GetAssertMessage(expected, actual, comparer, itemInspector, itemSeparator); + var assertMessage = GetAssertMessage(expected, actual, comparer, itemInspector, itemSeparator); if (message != null) { diff --git a/src/TestUtilities/DiffUtil.cs b/src/TestUtilities/DiffUtil.cs index 2cbf156f..1735023b 100644 --- a/src/TestUtilities/DiffUtil.cs +++ b/src/TestUtilities/DiffUtil.cs @@ -124,9 +124,9 @@ internal Edit(EditKind kind, int indexA, int indexB) protected IEnumerable> GetMatchingPairs(TSequence sequenceA, int lengthA, TSequence sequenceB, int lengthB) { - int[,] d = ComputeCostMatrix(sequenceA, lengthA, sequenceB, lengthB); - int i = lengthA; - int j = lengthB; + var d = ComputeCostMatrix(sequenceA, lengthA, sequenceB, lengthB); + var i = lengthA; + var j = lengthB; while (i != 0 && j != 0) { @@ -149,9 +149,9 @@ protected IEnumerable> GetMatchingPairs(TSequence sequenc protected IEnumerable GetEdits(TSequence sequenceA, int lengthA, TSequence sequenceB, int lengthB) { - int[,] d = ComputeCostMatrix(sequenceA, lengthA, sequenceB, lengthB); - int i = lengthA; - int j = lengthB; + var d = ComputeCostMatrix(sequenceA, lengthA, sequenceB, lengthB); + var i = lengthA; + var j = lengthB; while (i != 0 && j != 0) { @@ -203,13 +203,13 @@ protected double ComputeDistance(TSequence sequenceA, int lengthA, TSequence seq return (lengthA == lengthB) ? 0.0 : 1.0; } - int lcsLength = 0; + var lcsLength = 0; foreach (var pair in GetMatchingPairs(sequenceA, lengthA, sequenceB, lengthB)) { lcsLength++; } - int max = Math.Max(lengthA, lengthB); + var max = Math.Max(lengthA, lengthB); Debug.Assert(lcsLength <= max); return 1.0 - (double)lcsLength / (double)max; } @@ -244,23 +244,23 @@ protected double ComputeDistance(TSequence sequenceA, int lengthA, TSequence seq var d = new int[la, lb]; d[0, 0] = 0; - for (int i = 1; i <= lengthA; i++) + for (var i = 1; i <= lengthA; i++) { d[i, 0] = d[i - 1, 0] + DeleteCost; } - for (int j = 1; j <= lengthB; j++) + for (var j = 1; j <= lengthB; j++) { d[0, j] = d[0, j - 1] + InsertCost; } - for (int i = 1; i <= lengthA; i++) + for (var i = 1; i <= lengthA; i++) { - for (int j = 1; j <= lengthB; j++) + for (var j = 1; j <= lengthB; j++) { - int m1 = d[i - 1, j - 1] + (ItemsEqual(sequenceA, i - 1, sequenceB, j - 1) ? 0 : UpdateCost); - int m2 = d[i - 1, j] + DeleteCost; - int m3 = d[i, j - 1] + InsertCost; + var m1 = d[i - 1, j - 1] + (ItemsEqual(sequenceA, i - 1, sequenceB, j - 1) ? 0 : UpdateCost); + var m2 = d[i - 1, j] + DeleteCost; + var m3 = d[i, j - 1] + InsertCost; d[i, j] = Math.Min(Math.Min(m1, m2), m3); } } diff --git a/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs b/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs index 5c23fbe8..b4f7dd9f 100644 --- a/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs +++ b/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs @@ -242,7 +242,7 @@ protected void VerifyValues( var testBinDirectory = Path.GetDirectoryName(typeof(DotNetSdkTestBase).Assembly.Location); var buildLog = Path.Combine(RootDir.Path, $"build{_logIndex++}.binlog"); - bool success = false; + var success = false; try { if (!_projectRestored) @@ -272,8 +272,8 @@ where match.Success static bool diagnosticsEqual(string expected, string actual) { - string ellipsis = "..."; - int index = expected.IndexOf(ellipsis); + var ellipsis = "..."; + var index = expected.IndexOf(ellipsis); return (index == -1) ? expected == actual : actual.Length > expected.Length - ellipsis.Length && expected.Substring(0, index) == actual.Substring(0, index) && @@ -320,7 +320,7 @@ static bool diagnosticsEqual(string expected, string actual) private void FixupGeneratedPropsFilePath(string generatedPropsFilePath) { var content = File.ReadAllText(generatedPropsFilePath, Encoding.UTF8); - int i = 0; + var i = 0; content = Regex.Replace(content, "", match => (i++ == 0) ? $"" : ""); File.WriteAllText(generatedPropsFilePath, content, Encoding.UTF8); diff --git a/src/TestUtilities/EnumerableExtensions.cs b/src/TestUtilities/EnumerableExtensions.cs index e4c90136..99e29ed7 100644 --- a/src/TestUtilities/EnumerableExtensions.cs +++ b/src/TestUtilities/EnumerableExtensions.cs @@ -10,7 +10,7 @@ public static class EnumerableExtensions { public static IEnumerable SelectWithIndex(this IEnumerable items, Func selector) { - int i = 0; + var i = 0; foreach (var item in items) { yield return selector(item, i++); diff --git a/src/TestUtilities/TempFiles/TempDirectory.cs b/src/TestUtilities/TempFiles/TempDirectory.cs index f3be0afd..8c335ee0 100644 --- a/src/TestUtilities/TempFiles/TempDirectory.cs +++ b/src/TestUtilities/TempFiles/TempDirectory.cs @@ -31,7 +31,7 @@ private static string CreateUniqueDirectory(string basePath) { while (true) { - string dir = System.IO.Path.Combine(basePath, Guid.NewGuid().ToString()); + var dir = System.IO.Path.Combine(basePath, Guid.NewGuid().ToString()); try { Directory.CreateDirectory(dir); @@ -55,7 +55,7 @@ public string Path /// File name. public TempFile CreateFile(string name) { - string filePath = System.IO.Path.Combine(_path, name); + var filePath = System.IO.Path.Combine(_path, name); TempRoot.CreateStream(filePath); return _root.AddFile(new DisposableFile(filePath)); } @@ -65,7 +65,7 @@ public TempFile CreateFile(string name) /// public TempFile CopyFile(string originalPath, string? name = null) { - string filePath = System.IO.Path.Combine(_path, name ?? System.IO.Path.GetFileName(originalPath)); + var filePath = System.IO.Path.Combine(_path, name ?? System.IO.Path.GetFileName(originalPath)); File.Copy(originalPath, filePath); return _root.AddFile(new DisposableFile(filePath)); } @@ -76,7 +76,7 @@ public TempFile CopyFile(string originalPath, string? name = null) /// Directory name or unrooted directory path. public TempDirectory CreateDirectory(string name) { - string dirPath = System.IO.Path.Combine(_path, name); + var dirPath = System.IO.Path.Combine(_path, name); Directory.CreateDirectory(dirPath); return new TempDirectory(dirPath, _root); } diff --git a/src/dotnet-sourcelink/Program.cs b/src/dotnet-sourcelink/Program.cs index a671f677..fa479469 100644 --- a/src/dotnet-sourcelink/Program.cs +++ b/src/dotnet-sourcelink/Program.cs @@ -106,12 +106,12 @@ private static RootCommand GetRootCommand() test.SetAction((parseResult, cancellationToken) => { - string path = parseResult.GetValue(pathArg)!; - string? authMethod = parseResult.GetValue(authArg); + var path = parseResult.GetValue(pathArg)!; + var authMethod = parseResult.GetValue(authArg); Encoding? authEncoding = parseResult.GetValue(authEncodingArg); - string? user = parseResult.GetValue(userArg); - string? password = parseResult.GetValue(passwordArg); - bool offline = parseResult.GetValue(offlineArg); + var user = parseResult.GetValue(userArg); + var password = parseResult.GetValue(passwordArg); + var offline = parseResult.GetValue(offlineArg); return TestAsync(path, authMethod, authEncoding, user, password, offline, parseResult, cancellationToken); }); @@ -291,10 +291,10 @@ private static async Task DownloadAndValidateDocumentAsync(HttpClient clie private static byte[]? TryCalculateHashWithLineBreakSubstituted(byte[] content, IncrementalHash incrementalHash) { - int index = 0; + var index = 0; while (true) { - int lf = Array.IndexOf(content, (byte)'\n', index); + var lf = Array.IndexOf(content, (byte)'\n', index); if (lf < 0) { incrementalHash.AppendData(content, index, content.Length - index); @@ -370,7 +370,7 @@ private int PrintUrls(string path) var resolvedDocuments = new List(); ReadAndResolveDocuments(path, resolvedDocuments); - int unresolvedCount = 0; + var unresolvedCount = 0; foreach (var document in resolvedDocuments) { if (document.IsEmbedded) @@ -441,7 +441,7 @@ private void ReadAndResolveDocuments(string path, List resolvedDoc if (!ReadPdbMetadata(path, (filePath, metadataReader) => { var documents = new List<(string name, ImmutableArray hash, Guid hashAlgorithm, bool isEmbedded)>(); - bool hasUnembeddedDocument = false; + var hasUnembeddedDocument = false; foreach (var documentHandle in metadataReader.Documents) { @@ -482,7 +482,7 @@ private void ReadAndResolveDocuments(string path, List resolvedDoc foreach (var (name, hash, hashAlgorithm, isEmbedded) in documents) { - string? uri = isEmbedded ? null : sourceLinkMap.TryGetUri(name, out var mappedUri) ? mappedUri : null; + var uri = isEmbedded ? null : sourceLinkMap.TryGetUri(name, out var mappedUri) ? mappedUri : null; resolvedDocuments.Add(new DocumentInfo(filePath, name, uri, isEmbedded, hash, hashAlgorithm)); } })) From 1e77becbb1c4f811356b39a4458adfc3b8ba2f18 Mon Sep 17 00:00:00 2001 From: Tomas Matousek Date: Thu, 23 Oct 2025 11:02:54 -0700 Subject: [PATCH 3/3] Range --- src/Common/GitProvider/GetSourceLinkUrlGitTask.cs | 4 ++-- src/Common/Utilities/UriUtilities.cs | 2 +- .../GitIgnoreTests.cs | 4 ++-- .../GitDataReader/GitConfig.Reader.cs | 14 +++++++------- .../GitDataReader/GitConfig.cs | 2 +- .../GitDataReader/GitIgnore.Matcher.cs | 8 ++++---- .../GitDataReader/GitIgnore.cs | 2 +- .../GitDataReader/GitReferenceResolver.cs | 8 ++++---- .../GitDataReader/GitRepository.cs | 2 +- src/Microsoft.Build.Tasks.Git/GitOperations.cs | 4 ++-- src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs | 2 +- .../TranslateRepositoryUrls.cs | 2 +- src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs | 4 ++-- 13 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs b/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs index 75fa4d7f..458f7662 100644 --- a/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs +++ b/src/Common/GitProvider/GetSourceLinkUrlGitTask.cs @@ -52,7 +52,7 @@ internal GetSourceLinkUrlGitTask() { } /// Use the scheme. Some servers might not support https, so we can't default to https. /// protected virtual Uri GetDefaultContentUriFromHostUri(string authority, Uri gitUri) - => new Uri($"{gitUri.Scheme}://{authority}", UriKind.Absolute); + => new($"{gitUri.Scheme}://{authority}", UriKind.Absolute); protected virtual Uri GetDefaultContentUriFromRepositoryUri(Uri repositoryUri) => GetDefaultContentUriFromHostUri(repositoryUri.GetAuthority(), repositoryUri); @@ -137,7 +137,7 @@ static bool IsHexDigit(char c) const string GitUrlSuffix = ".git"; if (relativeUrl.EndsWith(GitUrlSuffix, StringComparison.Ordinal) && !relativeUrl.EndsWith("/" + GitUrlSuffix, StringComparison.Ordinal)) { - relativeUrl = relativeUrl.Substring(0, relativeUrl.Length - GitUrlSuffix.Length); + relativeUrl = relativeUrl[..^GitUrlSuffix.Length]; } SourceLinkUrl = BuildSourceLinkUrl(contentUri, gitUri, relativeUrl, revisionId, hostItem); diff --git a/src/Common/Utilities/UriUtilities.cs b/src/Common/Utilities/UriUtilities.cs index dbd727a8..db4292d4 100644 --- a/src/Common/Utilities/UriUtilities.cs +++ b/src/Common/Utilities/UriUtilities.cs @@ -20,7 +20,7 @@ public static int GetExplicitPort(this Uri uri) public static string Combine(string baseUrl, string relativeUrl) => string.IsNullOrEmpty(relativeUrl) ? baseUrl : baseUrl.EndsWith("/") - ? (relativeUrl.StartsWith("/") ? baseUrl + relativeUrl.Substring(1) : baseUrl + relativeUrl) + ? (relativeUrl.StartsWith("/") ? baseUrl + relativeUrl[1..] : baseUrl + relativeUrl) : (relativeUrl.StartsWith("/") ? baseUrl + relativeUrl : baseUrl + "/" + relativeUrl); public static bool UrlStartsWith(string url, string prefix) diff --git a/src/Microsoft.Build.Tasks.Git.UnitTests/GitIgnoreTests.cs b/src/Microsoft.Build.Tasks.Git.UnitTests/GitIgnoreTests.cs index 183ea724..b10d2705 100644 --- a/src/Microsoft.Build.Tasks.Git.UnitTests/GitIgnoreTests.cs +++ b/src/Microsoft.Build.Tasks.Git.UnitTests/GitIgnoreTests.cs @@ -156,7 +156,7 @@ public void IsIgnored_CaseSensitive() "/Repo/A/B: False", "/Repo/A: False", "/Repo: False" - }, matcher.DirectoryIgnoreStateCache.Select(kvp => $"{kvp.Key.Substring(rootDir.Path.Length)}: {kvp.Value}")); + }, matcher.DirectoryIgnoreStateCache.Select(kvp => $"{kvp.Key[rootDir.Path.Length..]}: {kvp.Value}")); } [Fact] @@ -213,7 +213,7 @@ public void IsIgnored_IgnoreCase() "/Repo/A/DIr: True", "/Repo/A: False", "/Repo: False", - }, matcher.DirectoryIgnoreStateCache.Select(kvp => $"{kvp.Key.Substring(rootDir.Path.Length)}: {kvp.Value}")); + }, matcher.DirectoryIgnoreStateCache.Select(kvp => $"{kvp.Key[rootDir.Path.Length..]}: {kvp.Value}")); } } } diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs index 2ffa39ad..854e6785 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.Reader.cs @@ -276,7 +276,7 @@ private string NormalizeRelativePath(string relativePath, string basePath, GitVa if (relativePath.Length >= 2 && relativePath[0] == '~' && PathUtils.IsDirectorySeparator(relativePath[1])) { root = _environment.GetHomeDirectoryForPathExpansion(relativePath); - relativePath = relativePath.Substring(2); + relativePath = relativePath[2..]; } else { @@ -315,12 +315,12 @@ private bool IsIncludePath(GitVariableName key, string configFilePath) if (key.SubsectionName.StartsWith(caseSensitiveGitDirPrefix, StringComparison.Ordinal)) { - pattern = key.SubsectionName.Substring(caseSensitiveGitDirPrefix.Length); + pattern = key.SubsectionName[caseSensitiveGitDirPrefix.Length..]; ignoreCase = false; } else if (key.SubsectionName.StartsWith(caseInsensitiveGitDirPrefix, StringComparison.Ordinal)) { - pattern = key.SubsectionName.Substring(caseInsensitiveGitDirPrefix.Length); + pattern = key.SubsectionName[caseInsensitiveGitDirPrefix.Length..]; ignoreCase = true; } else @@ -331,12 +331,12 @@ private bool IsIncludePath(GitVariableName key, string configFilePath) if (pattern.Length >= 2 && pattern[0] == '.' && pattern[1] == '/') { // leading './' is substituted with the path to the directory containing the current config file. - pattern = PathUtils.CombinePosixPaths(PathUtils.ToPosixPath(Path.GetDirectoryName(configFilePath)!), pattern.Substring(2)); + pattern = PathUtils.CombinePosixPaths(PathUtils.ToPosixPath(Path.GetDirectoryName(configFilePath)!), pattern[2..]); } else if (pattern.Length >= 2 && pattern[0] == '~' && pattern[1] == '/') { // leading '~/' is substituted with HOME path - pattern = PathUtils.CombinePosixPaths(PathUtils.ToPosixPath(_environment.GetHomeDirectoryForPathExpansion(pattern)), pattern.Substring(2)); + pattern = PathUtils.CombinePosixPaths(PathUtils.ToPosixPath(_environment.GetHomeDirectoryForPathExpansion(pattern)), pattern[2..]); } else if (!PathUtils.IsAbsolute(pattern)) { @@ -408,8 +408,8 @@ internal static void ReadSectionHeader(LineCountingReader reader, StringBuilder // "[x.]" parses to section "x.", subsection "" (lookups "X..var" and "x..var" suceed) // "[x..]" parses to section "x", subsection "." (lookups "X...var" and "x...var" suceed) - var prefix = (firstDot == name.Length - 1) ? name : name.Substring(0, firstDot); - var suffix = name.Substring(firstDot + 1); + var prefix = (firstDot == name.Length - 1) ? name : name[..firstDot]; + var suffix = name[(firstDot + 1)..]; subsectionName = (subsectionName.Length > 0) ? suffix + "." + subsectionName : suffix; name = prefix; diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.cs index 5d57c7b6..4462d0fc 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitConfig.cs @@ -109,7 +109,7 @@ internal static bool TryParseInt64Value(string? str, out long value) break; } - if (!long.TryParse(multiplier > 1 ? str.Substring(0, str.Length - 1) : str, out value)) + if (!long.TryParse(multiplier > 1 ? str[..^1] : str, out value)) { return false; } diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.Matcher.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.Matcher.cs index 7b7132d6..e04736a3 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.Matcher.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.Matcher.cs @@ -55,7 +55,7 @@ internal IReadOnlyDictionary DirectoryIgnoreStateCache } else { - var parentDirectory = directory.Substring(0, directory.LastIndexOf('/', directory.Length - 2, directory.Length - 1) + 1); + var parentDirectory = directory[..(directory.LastIndexOf('/', directory.Length - 2, directory.Length - 1) + 1)]; parent = GetPatternGroup(parentDirectory); } @@ -172,8 +172,8 @@ private static void SplitPath(string fullPath, out string? directoryWithSlash, o } else { - directoryWithSlash = fullPath.Substring(0, i + 1); - fileName = fullPath.Substring(i + 1); + directoryWithSlash = fullPath[..(i + 1)]; + fileName = fullPath[(i + 1)..]; } } @@ -222,7 +222,7 @@ private bool IsIgnored(string normalizedPosixPath, string directory, string file } var matchPath = pattern.IsFullPathPattern ? - lazyRelativePath ??= normalizedPosixPath.Substring(patternGroup.ContainingDirectory.Length) : + lazyRelativePath ??= normalizedPosixPath[patternGroup.ContainingDirectory.Length..] : fileName; if (Glob.IsMatch(pattern.Glob, matchPath, Ignore.IgnoreCase, matchWildCardWithDirectorySeparator: false)) diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs index 0dcea7ab..bc980d5a 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitIgnore.cs @@ -224,7 +224,7 @@ internal static bool TryParsePattern(string line, StringBuilder reusableBuffer, var escape = line.IndexOf('\\', s, e - s); if (escape < 0) { - glob = line.Substring(s, e - s); + glob = line[s..e]; return true; } diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs index aac23c79..4f3687e3 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitReferenceResolver.cs @@ -95,7 +95,7 @@ internal static ImmutableDictionary ReadPackedReferences(TextRea throw invalidData(); } - var dereferencedTagObjectId = line.Substring(1); + var dereferencedTagObjectId = line[1..]; if (!IsObjectId(dereferencedTagObjectId)) { throw invalidData(); @@ -112,14 +112,14 @@ internal static ImmutableDictionary ReadPackedReferences(TextRea throw invalidData(); } - var objectId = line.Substring(0, separator); + var objectId = line[..separator]; if (!IsObjectId(objectId)) { throw invalidData(); } var nextSeparator = line.IndexOfAny(CharUtils.WhitespaceSeparators, separator + 1); - var reference = (nextSeparator >= 0) ? line.Substring(separator + 1, nextSeparator - separator - 1) : line.Substring(separator + 1); + var reference = (nextSeparator >= 0) ? line.Substring(separator + 1, nextSeparator - separator - 1) : line[(separator + 1)..]; if (reference.Length == 0) { @@ -171,7 +171,7 @@ private static bool TryGetReferenceName(string reference, [NotNullWhen(true)] ou const string refPrefix = "ref: "; if (reference.StartsWith(refPrefix + RefsPrefix, StringComparison.Ordinal)) { - name = reference.Substring(refPrefix.Length); + name = reference[refPrefix.Length..]; return true; } diff --git a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs index d0f6c5ab..a0979fc2 100644 --- a/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs +++ b/src/Microsoft.Build.Tasks.Git/GitDataReader/GitRepository.cs @@ -465,7 +465,7 @@ private static string ReadDotGitFile(string path) throw new InvalidDataException(string.Format(Resources.FormatOfFileIsInvalid, path)); } - var link = content.Substring(GitDirPrefix.Length).TrimEnd(CharUtils.AsciiWhitespace); + var link = content[GitDirPrefix.Length..].TrimEnd(CharUtils.AsciiWhitespace); try { diff --git a/src/Microsoft.Build.Tasks.Git/GitOperations.cs b/src/Microsoft.Build.Tasks.Git/GitOperations.cs index 68973c0d..78fcb2e6 100644 --- a/src/Microsoft.Build.Tasks.Git/GitOperations.cs +++ b/src/Microsoft.Build.Tasks.Git/GitOperations.cs @@ -135,7 +135,7 @@ internal static string ApplyInsteadOfUrlMapping(GitConfig config, string url) } } - return (longestPrefixLength >= 0) ? replacement + url.Substring(longestPrefixLength) : url; + return (longestPrefixLength >= 0) ? replacement + url[longestPrefixLength..] : url; } internal static Uri? NormalizeUrl(GitRepository repository, string url) @@ -234,7 +234,7 @@ private static bool TryParseScp(string value, [NotNullWhen(true)]out Uri? uri) } // [user@]server:path - var url = "ssh://" + value.Substring(0, colon) + "/" + value.Substring(colon + 1); + var url = "ssh://" + value[..colon] + "/" + value[(colon + 1)..]; return Uri.TryCreate(url, UriKind.Absolute, out uri); } diff --git a/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs b/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs index df08128d..f029f8e6 100644 --- a/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs +++ b/src/SourceLink.AzureRepos.Git/GetSourceLinkUrl.cs @@ -22,7 +22,7 @@ protected override Uri GetDefaultContentUriFromHostUri(string authority, Uri git { var gitHost = gitUri.GetHost(); return AzureDevOpsUrlParser.IsVisualStudioHostedServer(gitHost) ? - new Uri($"{gitUri.Scheme}://{gitHost.Substring(0, gitHost.IndexOf('.'))}.{authority}", UriKind.Absolute) : + new Uri($"{gitUri.Scheme}://{gitHost[..gitHost.IndexOf('.')]}.{authority}", UriKind.Absolute) : new Uri($"{gitUri.Scheme}://{authority}", UriKind.Absolute); } diff --git a/src/SourceLink.AzureRepos.Git/TranslateRepositoryUrls.cs b/src/SourceLink.AzureRepos.Git/TranslateRepositoryUrls.cs index 4dbdf60b..9a345fba 100644 --- a/src/SourceLink.AzureRepos.Git/TranslateRepositoryUrls.cs +++ b/src/SourceLink.AzureRepos.Git/TranslateRepositoryUrls.cs @@ -32,7 +32,7 @@ public sealed class TranslateRepositoryUrls : TranslateRepositoryUrlsGitTask return null; } - var result = host.Substring(prefix.Length); + var result = host[prefix.Length..]; if (isVisualStudioHost) { result = account + "." + result; diff --git a/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs b/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs index b4f7dd9f..914f1431 100644 --- a/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs +++ b/src/TestUtilities/DotNetSdk/DotNetSdkTestBase.cs @@ -276,8 +276,8 @@ static bool diagnosticsEqual(string expected, string actual) var index = expected.IndexOf(ellipsis); return (index == -1) ? expected == actual : actual.Length > expected.Length - ellipsis.Length && - expected.Substring(0, index) == actual.Substring(0, index) && - expected.Substring(index + ellipsis.Length) == actual.Substring(actual.Length - (expected.Length - index - ellipsis.Length)); + expected[..index] == actual[..index] && + expected[(index + ellipsis.Length)..] == actual[^(expected.Length - index - ellipsis.Length)..]; } var outputLines = buildResult.Output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);