Change:
// "foo" on line 339, col 12 // "foo" on line 339, column 12 // "foo" line 339 column 12 <del> `['"]?(?:,? |: ?| on )line ${l()}(,? col(?:umn)? ${c()})?$`, // foo(339) // foo(339,12) // foo(339, 12) // foo (339) //   ... // foo: (339) //   ... `:? ?[[(]${l()}(?:, ?${c()})?[])]$`, ]; const suffixClause = lineAndColumnRegexClauses // Join all clauses together .join('|') // Convert spaces to allow the non-breaking space char (ascii 160) .replace(/ /g, `[${'u00A0'} ]`); return new RegExp(`(${suffixClause})`); }); const linkSuffixRegex = new Lazy<RegExp>(() => { let ri = 0; let ci = 0; function l(): string { return `(?<row${ri++}>d+)`; } function c(): string { return `(?<col${ci++}>d+)`; } const lineAndColumnRegexClauses = [ // foo:339 // foo:339:12 // foo 339 // foo 339:12                    [#140780] // "foo",339 // "foo",339:12 `(?::| |['"],)${l()}(:${c()})?`, // The quotes below are optional [#171652] // foo, line 339                [#40468] // foo, line 339, col 12 // foo, line 339, column 12 // "foo":line 339 // "foo":line 339, col 12 // "foo":line 339, column 12 // "foo": line 339 // "foo": line 339, col 12 // "foo": line 339, column 12 // "foo" on line 339 // "foo" on line 339, col 12 // "foo" on line 339, column 12 // "foo" line 339 column 12 `['"]?(?:,? |: ?| on )line ${l()}(,? col(?:umn)? ${c()})?`, </del> <ins> // "foo", line 339, character 12     [#171880] // "foo", line 339, characters 12-13 [#171880] // "foo", lines 339-340              [#171880] `['"]?(?:,? |: ?| on )lines? ${l()}(?:-d+)?(?:,? (?:col(?:umn)?|characters?) ${c()}(?:-d+)?)?` + eolSuffix, </ins> // foo(339) // foo(339,12) // foo(339, 12)

Discussion:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --originally posted here: when using the OCaml ecosystem (in my example ) the errors can't be clicked on in the terminal: <img width="736" alt="Screenshot 2023-01-19 at 10 06 47 PM" src="https://user-"I often can't click on the file because it isn't relative to where I am, and when I can click it doesn't get me to the line number. I'm not sure how other languages do it but I don't remember having that problem in other ecosystems. I'm also not sure how to fix it. I believe the terminal / vscode will detect filename:linenumber all the time, but the "File "", line 588, characters 50-75" is not recognized.
yeah looks like we don't support that case atm, though this one comes close
<!-- -96bd-47a8-a0e8- --This feature request is now a candidate for our backlog. The community has 60 days to the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our . Happy Coding!
<!-- -c9e0-7adb-d31b- --:slightlysmilingface: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our . Happy Coding!
The situation is pretty good on Insiders after the many link changes that have gone in since December: ! Keeping this open to also match the part and ideally select the actual range in this case.
what's Insiders? EDIT: the beta,
I'm enjoying the improvement, but the pattern still doesn't work, e.g.: Thanks!
is that a real example or did you make up the characters part? I'm not sure what multi-line and multi-character means exactly
Forking proper multi-line support to , we should be able to support the simple case of just going to the first line easily in the one.
Thank you for your work!

It's a real example, just going to the first line is good enough for me! The meaning of is "in the selection within file F, spanning from line N1, character/column C1 to line N2, character/column C2" (subject to off-by-one errors, I don't remember how the characters are counted).
Oh ok, that makes sense
FYI the row/col end part of the link should work when is merged