Fix switch regex to not match numeric values like -1 inside quoted strings#761
Merged
Fix switch regex to not match numeric values like -1 inside quoted strings#761
Conversation
Co-authored-by: snehara99 <113148726+snehara99@users.noreply.github.com>
Co-authored-by: snehara99 <113148726+snehara99@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix parseCompilerArgs.bat failure with space in argument
Fix parseCompilerArgs.bat failure when arguments contain spaces in quoted strings
Jan 23, 2026
Contributor
|
@copilot I'm getting the following errors now when I run included.h exists under the included directory too |
Co-authored-by: snehara99 <113148726+snehara99@users.noreply.github.com>
Contributor
Author
... Fixed in f1de702. The issue was that when The fix adds a |
Co-authored-by: snehara99 <113148726+snehara99@users.noreply.github.com>
Co-authored-by: snehara99 <113148726+snehara99@users.noreply.github.com>
Copilot
AI
changed the title
Fix parseCompilerArgs.bat failure when arguments contain spaces in quoted strings
Fix switch regex to not match numeric values like -1 inside quoted strings
Feb 12, 2026
GNU make outputs directory banners like:
make.exe: Entering directory `path'
The trailing single quote was opening a phantom quote context in
replaceStringNotInQuotes when processing the entire dry-run output
as a single string. This caused semicolons inside quoted macro values
(e.g. -D'MY_ASSERT(test)'='do { return -1; }') to be incorrectly
replaced with newlines, truncating compiler commands.
Fix: process the semicolon and && replacements per-line instead of
on the whole string. After line-continuation joining, each line is a
complete command, so quote state should not leak across lines.
Added regression tests for both semicolon and && cases with
make directory banners.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The regex in parseMultipleSwitchFromToolArguments matched quoted define names (e.g., 'MY_ASSERT(test)') as complete values, never reaching the name=value branch. This caused IntelliSense to show only the macro name without its body. Changes: - Add negative lookahead (?!=) after the quoted-value branch so it rejects matches followed by '=', falling through to the name=value branch that captures both parts - After outer quote removal, strip shell-style concatenated quoting artifacts around '=' (e.g., NAME'='VALUE -> NAME=VALUE) - Export parseMultipleSwitchFromToolArguments for direct unit testing - Add 6 unit tests covering quoted name=value, simple defines, quoted values with spaces, and multiple defines Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The compilerFragments code naively split the command line on ' -D', which
broke when define values contained spaces (e.g., -D'NAME'='value with
spaces'). This produced truncated fragments that C/C++ extension parsed
as spurious duplicate defines.
Additionally, .split('/s+/') was using a string literal instead of a
regex /\s+/, so it never actually split on whitespace.
Fix: derive compilerFragments from the already-parsed defines array
instead of re-splitting the raw command line. Re-quote values containing
spaces since CppTools shell-parses compilerFragments (per issue #352).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The PR #761 regex change from [a-zA-Z0-9_] to [a-zA-Z] was overly restrictive — it excluded underscore as a leading character, which was not the intent. The bug was only about digits (e.g., -1 matching as a switch). Changed to [a-zA-Z_] to allow underscores while still rejecting leading digits. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
Copilot stopped work on behalf of
snehara99 due to an error
April 23, 2026 18:18
hanniavalera
approved these changes
Apr 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
parseCompilerArgs.batfails when parsing macro definitions containing numeric expressions like-D'LFS_ASSERT(test)'='do { if(!(test)) {return -1;} } while(0)'. The-1inside the quoted value was incorrectly matched as a compiler switch.Root Cause
The regex pattern
([a-zA-Z0-9_]+)inparseAnySwitchFromToolArgumentsmatches any alphanumeric sequence after-, including-1. This splits quoted strings at the wrong boundary.Fix
Require switch names to start with a letter:
This prevents numeric tokens like
-1,-2, etc. from being matched as switches while still matching valid switches like-D,-Wall,-std.Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.