Follow-up #33868
This PR fixes a few issues with determining the completion range for
client‑ and variable‑list completions.
1. Non‑word completions
We previously supported only word characters and _, using their combined
length to compute the start offset. In PHP, however, an expression can
contain `$`, `-`, `>`, `[`, `]`, `(`, and `)`. Because these characters
weren’t treated as word characters, the start offset stopped at them,
even when the preceding character was part of a word.
2. Trailing characters inside the search text
When autocompletion occurred in the middle of the search text, we didn’t
account for trailing characters. As a result, the start offset was off
by the number of characters after the cursor. For example, replacing res
with result in print(res) produced `print(rresult)` because the trailing
`)` wasn’t subtracted from the start offset.
The following completions are correctly covered now:
- **Before** `$aut` -> `$aut$author` **After** `$aut` -> `$author`
- **Before** `$author->na` -> `$author->na$author->name` **After**
`$author->na` -> `$author->name`
- **Before** `$author->books[` -> `$author->books[$author->books[0]`
**After** `$author->books[` -> `$author->books[0]`
- **Before** `print(res)` -> `print(rresult)` **After** `print(res)` ->
`print(result)`
**Before**
https://github.com/user-attachments/assets/b530cf31-8d4d-45e6-9650-18574f14314chttps://github.com/user-attachments/assets/52475b7b-2bf2-4749-98ec-0dc933fcc364
**After**
https://github.com/user-attachments/assets/c065701b-31c9-4e0a-b584-d1daffe3a38chttps://github.com/user-attachments/assets/455ebb3e-632e-4a57-aea8-d214d2992c06
Release Notes:
- Debugger: Fixed autocompletion not always replacing the correct search
text