Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --When working on Haskell code, may produce error output in the following format: It would be nice to have terminal link detection support for this format (or, to discard the part and just jump to the start column). Currently, this format seems to trip up the parser: it detects the file, line number, and start column correctly, but then it seems to select backwards to near the start of the file. (Note: ghcid seems to treat the end column index as inclusive, i.e. the cursor is before the last notable character.)
Can reproduce: ! Selects from 1:3 to 115 !
What is detected:
Caused by a bad regex match: !

Discussion:
// - Row     = 339 // - Col     = 12 // - RowEnd  = 341 <del> // - ColEnd  = 14 </del> <ins> // - ColEnd  = 789 </ins> // // These all support single quote ' in the place of " and [] in the place of () const lineAndColumnRegexClauses = [ // foo:339 // foo:339:12 <ins> // foo:339:12-789 </ins> // foo:339.12 // foo 339 <del> // foo 339:12                             [#140780] </del> <ins> // foo 339:12                              [#140780] </ins> // foo 339.12 // "foo",339 // "foo",339:12 // "foo",339.12 <del> // "foo",339.12-14 // "foo",339.12-341.14 `(?::| |['"],)${r()}([:.]${c()}(?:-(?:${re()}.)?${ce()})?)?` + eolSuffix, // The quotes below are optional          [#171652] // "foo", line 339                        [#40468] </del> <ins> // "foo",339.12-789 // "foo",339.12-341.789 `(?::| |['"],)${r()}([:.]${c()}(?:-(?:${re()}.)?${ce()})?)?` + eolSuffix, // The quotes below are optional           [#171652] // "foo", line 339                         [#40468] </ins> // "foo", line 339, col 12 // "foo", line 339, column 12 // "foo":line 339

// "foo" on line 339, col 12 // "foo" on line 339, column 12 // "foo" line 339 column 12 <del> // "foo", line 339, character 12          [#171880] // "foo", line 339, characters 12-14      [#171880] // "foo", lines 339-341                   [#171880] // "foo", lines 339-341, characters 12-14 [#178287] </del> <ins> // "foo", line 339, character 12           [#171880] // "foo", line 339, characters 12-789      [#171880] // "foo", lines 339-341                    [#171880] // "foo", lines 339-341, characters 12-789 [#178287] </ins> `['"]?(?:,? |: ?| on )lines? ${r()}(?:-${re()})?(?:,? (?:col(?:umn)?|characters?) ${c()}(?:-${ce()})?)?` + eolSuffix, // foo(339) // foo(339,12)

const testRow = 339; const testCol = 12; const testRowEnd = 341; <del> const testColEnd = 14; </del> <ins> const testColEnd = 789; </ins> const testLinks: ITestLink[] = [ // Simple { link: 'foo', prefix: undefined, suffix: undefined, hasRow: false, hasCol: false }, { link: 'foo:339', prefix: undefined, suffix: ':339', hasRow: true, hasCol: false }, { link: 'foo:339:12', prefix: undefined, suffix: ':339:12', hasRow: true, hasCol: true }, <ins> { link: 'foo:339:12-789', prefix: undefined, suffix: ':339:12-789', hasRow: true, hasCol: true, hasRowEnd: false, hasColEnd: true }, { link: 'foo:339.12-341.789', prefix: undefined, suffix: ':339.12-341.789', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </ins> { link: 'foo:339.12', prefix: undefined, suffix: ':339.12', hasRow: true, hasCol: true }, <ins> { link: 'foo:339.12-789', prefix: undefined, suffix: ':339.12-789', hasRow: true, hasCol: true, hasRowEnd: false, hasColEnd: true }, { link: 'foo:339.12-341.789', prefix: undefined, suffix: ':339.12-341.789', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </ins> { link: 'foo 339', prefix: undefined, suffix: ' 339', hasRow: true, hasCol: false }, { link: 'foo 339:12', prefix: undefined, suffix: ' 339:12', hasRow: true, hasCol: true }, <ins> { link: 'foo 339:12-789', prefix: undefined, suffix: ' 339:12-789', hasRow: true, hasCol: true, hasRowEnd: false, hasColEnd: true }, { link: 'foo 339:12-341.789', prefix: undefined, suffix: ' 339:12-341.789', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </ins> { link: 'foo 339.12', prefix: undefined, suffix: ' 339.12', hasRow: true, hasCol: true }, <del> { link: 'foo 339.12-14', prefix: undefined, suffix: ' 339.12-14', hasRow: true, hasCol: true, hasRowEnd: false, hasColEnd: true }, { link: 'foo 339.12-341.14', prefix: undefined, suffix: ' 339.12-341.14', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </del> <ins> { link: 'foo 339.12-789', prefix: undefined, suffix: ' 339.12-789', hasRow: true, hasCol: true, hasRowEnd: false, hasColEnd: true }, { link: 'foo 339.12-341.789', prefix: undefined, suffix: ' 339.12-341.789', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </ins> // Double quotes { link: '"foo",339', prefix: '"', suffix: '",339', hasRow: true, hasCol: false },

// OCaml-style { link: '"foo", line 339, character 12', prefix: '"', suffix: '", line 339, character 12', hasRow: true, hasCol: true }, <del> { link: '"foo", line 339, characters 12-14', prefix: '"', suffix: '", line 339, characters 12-14', hasRow: true, hasCol: true, hasColEnd: true }, </del> <ins> { link: '"foo", line 339, characters 12-789', prefix: '"', suffix: '", line 339, characters 12-789', hasRow: true, hasCol: true, hasColEnd: true }, </ins> { link: '"foo", lines 339-341', prefix: '"', suffix: '", lines 339-341', hasRow: true, hasCol: false, hasRowEnd: true }, <del> { link: '"foo", lines 339-341, characters 12-14', prefix: '"', suffix: '", lines 339-341, characters 12-14', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </del> <ins> { link: '"foo", lines 339-341, characters 12-789', prefix: '"', suffix: '", lines 339-341, characters 12-789', hasRow: true, hasCol: true, hasRowEnd: true, hasColEnd: true }, </ins> // Non-breaking space { link: 'foou00A0339:12', prefix: undefined, suffix: 'u00A0339:12', hasRow: true, hasCol: true },