Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up) - #9749

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup
Jul 8, 2026
Merged

Simplify TestRunParameters argument validation with LINQ (PR #9748 follow-up)#9749
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/phase6a-review-followup

Conversation

@Evangelink

Copy link
Copy Markdown
Member

What

Follow-up to the merged #9748 (Phase 6a), addressing the review feedback on that PR.

Change

The github-code-quality bot flagged that MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync used a foreach that implicitly filters its sequence. Replaced it with an explicit FirstOrDefault filter:

string?invalidArgument=arguments.FirstOrDefault(argument =>!argument.Contains('='));returninvalidArgumentis not null?ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture,PlatformAdapterResources.TestRunParameterOptionArgumentIsNotParameter,invalidArgument)):ValidationResult.ValidTask;

No behavior change — it still reports the first argument missing = with the same localized message, and returns valid when all arguments contain =.

Not addressed here (deferred/informational)

The expert-review summary on #9748 raised two informational, non-blocking notes that are intentionally left out of this PR:

  • MSTEST_EXPERIMENTAL_NATIVE_MTP casing (is "1" or "true" or "True" won't match "TRUE") — the reviewer explicitly suggested harmonizing this when the flag is promoted in Phase 6b, so it's folded into that work.
  • MSTestRunSettingsConfigurationProvider.TryGet() re-parsing the XDocument — a cold path; caching is optional and not warranted yet.

Validation

  • Full build clean (warnings-as-errors).
  • MSTestAdapter.UnitTests (45) pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Address the code-quality review comment on #9748: replace the implicitly-filtering
foreach in MSTestTestRunParametersCommandLineOptionsProvider.ValidateOptionArgumentsAsync
with an explicit FirstOrDefault filter. No behavior change — still reports the first
argument missing '=' with the same localized message.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings July 8, 2026 19:07

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a follow-up to #9748 (native MTP integration, Phase 6a) that addresses a github-code-quality bot review note. It simplifies argument validation in the MSTest-native --test-parameter command-line option provider by replacing an implicit-filtering foreach loop with an explicit FirstOrDefault LINQ query. The change is confined to the experimental native MTP path (#if !WINDOWS_UWP) and has no behavioral impact.

Changes:

  • Replaced the foreach + if (!argument.Contains('=')) early-return pattern with arguments.FirstOrDefault(argument => !argument.Contains('=')).
  • Uses a conditional expression to return InvalidTask (with the same localized TestRunParameterOptionArgumentIsNotParameter message) when an invalid argument exists, otherwise ValidTask.
Show a summary per file
FileDescription
src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestTestRunParametersCommandLineOptionsProvider.csRefactors ValidateOptionArgumentsAsync to use FirstOrDefault instead of a filtering foreach; behavior (first-invalid-argument reporting and empty-array validity) is preserved.

Review details

  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Medium

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

✅ 22/22 dimensions clean — no findings.

The FirstOrDefault replacement is semantically equivalent to the original foreach with early return: both find the first argument not containing '=' and report it (or return valid when all arguments pass). The lambda captures no variables, so the delegate is compiler-cacheable — no allocation concern on this cold startup path. LINQ is available via implicit usings, and the existing acceptance/unit tests cover the validation behavior end-to-end.

@Evangelink
Amaury Levé (Evangelink) merged commit cf0dea9 into mainJul 8, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/phase6a-review-followup branch July 8, 2026 19:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink