Skip to content

Commit cf1abc4

Browse files
authored
Merge pull request microsoft#181756 from microsoft/tyriar/180574
Ignore query string in detected terminal local links
2 parents 3f7bc08 + e6210ec commit cf1abc4

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ function generateLinkSuffixRegex(eolOnly: boolean) {
105105

106106
/**
107107
* Removes the optional link suffix which contains line and column information.
108-
* @param link The link to parse.
108+
* @param link The link to use.
109109
*/
110110
export function removeLinkSuffix(link: string): string {
111111
const suffix = getLinkSuffix(link)?.suffix;
@@ -115,6 +115,20 @@ export function removeLinkSuffix(link: string): string {
115115
return link.substring(0, suffix.index);
116116
}
117117

118+
/**
119+
* Removes any query string from the link.
120+
* @param link The link to use.
121+
*/
122+
export function removeLinkQueryString(link: string): string {
123+
// Skip ? in UNC paths
124+
const start = link.startsWith('\\\\?\\') ? 4 : 0;
125+
const index = link.indexOf('?', start);
126+
if (index === -1) {
127+
return link;
128+
}
129+
return link.substring(0, index);
130+
}
131+
118132
/**
119133
* Returns the optional link suffix which contains line and column information.
120134
* @param link The link to parse.

src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkResolver.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { ITerminalLinkResolver, ResolvedLink } from 'vs/workbench/contrib/terminalContrib/links/browser/links';
7-
import { removeLinkSuffix, winDrivePrefix } from 'vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing';
7+
import { removeLinkSuffix, removeLinkQueryString, winDrivePrefix } from 'vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing';
88
import { URI } from 'vs/base/common/uri';
99
import { ITerminalBackend, ITerminalProcessManager } from 'vs/workbench/contrib/terminal/common/terminal';
1010
import { Schemas } from 'vs/base/common/network';
@@ -52,9 +52,14 @@ export class TerminalLinkResolver implements ITerminalLinkResolver {
5252
}
5353
}
5454

55-
// Remove any line/col suffix before processing the path
55+
// Remove any line/col suffix
5656
let linkUrl = removeLinkSuffix(link);
57-
if (!linkUrl) {
57+
58+
// Remove any query string
59+
linkUrl = removeLinkQueryString(linkUrl);
60+
61+
// Exit early if the link is determines as not valid already
62+
if (linkUrl.length === 0) {
5863
cache.set(link, null);
5964
return null;
6065
}

src/vs/workbench/contrib/terminalContrib/links/test/browser/terminalLinkParsing.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { deepStrictEqual, ok, strictEqual } from 'assert';
77
import { OperatingSystem } from 'vs/base/common/platform';
8-
import { detectLinks, detectLinkSuffixes, getLinkSuffix, IParsedLink, removeLinkSuffix } from 'vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing';
8+
import { detectLinks, detectLinkSuffixes, getLinkSuffix, IParsedLink, removeLinkQueryString, removeLinkSuffix } from 'vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing';
99

1010
interface ITestLink {
1111
link: string;
@@ -206,6 +206,19 @@ suite('TerminalLinkParsing', () => {
206206
);
207207
});
208208
});
209+
suite('removeLinkQueryString', () => {
210+
test('should remove any query string from the link', () => {
211+
strictEqual(removeLinkQueryString('?a=b'), '');
212+
strictEqual(removeLinkQueryString('foo?a=b'), 'foo');
213+
strictEqual(removeLinkQueryString('./foo?a=b'), './foo');
214+
strictEqual(removeLinkQueryString('/foo/bar?a=b'), '/foo/bar');
215+
strictEqual(removeLinkQueryString('foo?a=b?'), 'foo');
216+
strictEqual(removeLinkQueryString('foo?a=b&c=d'), 'foo');
217+
});
218+
test('should respect ? in UNC paths', () => {
219+
strictEqual(removeLinkQueryString('\\\\?\\foo?a=b'), '\\\\?\\foo',);
220+
});
221+
});
209222
suite('detectLinks', () => {
210223
test('foo(1, 2) bar[3, 4] "baz" on line 5', () => {
211224
deepStrictEqual(

0 commit comments

Comments
 (0)