diff --git a/src/vs/workbench/contrib/terminal/browser/links/terminalLinkManager.ts b/src/vs/workbench/contrib/terminal/browser/links/terminalLinkManager.ts index 63946a0606d58aac2137d370d3c95f77d2a9fdc2..8543807feb9bdd037804a3ae3b8fba8a5d983a5f 100644 --- a/src/vs/workbench/contrib/terminal/browser/links/terminalLinkManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/links/terminalLinkManager.ts @@ -38,7 +38,7 @@ const excludedPathCharactersClause = '[^\\0\\s!$`&*()\\[\\]+\'":;\\\\]'; const unixLocalLinkClause = '((' + pathPrefix + '|(' + excludedPathCharactersClause + ')+)?(' + pathSeparatorClause + '(' + excludedPathCharactersClause + ')+)+)'; // Valid absolute formats: C:, \\?\C: and \\?\%VAR% -const winDrivePrefix = '(?:\\\\\\\\\\?\\\\)?([a-zA-Z]:|%)'; +const winDrivePrefix = '(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:'; const winPathPrefix = '(' + winDrivePrefix + '|\\.\\.?|\\~)'; const winPathSeparatorClause = '(\\\\|\\/)'; const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!$`&*()\\[\\]+\'":;]'; @@ -465,7 +465,7 @@ export class TerminalLinkManager extends DisposableStore { } else if (link.charAt(0) !== '/' && link.charAt(0) !== '~') { // Resolve workspace path . | .. | -> /. | /.. | / if (this._processManager.os === OperatingSystem.Windows) { - if (!link.match('^' + winDrivePrefix)) { + if (!link.match('^' + winDrivePrefix) && !link.startsWith('\\\\?\\')) { if (!this._processCwd) { // Abort if no workspace is open return null; diff --git a/src/vs/workbench/contrib/terminal/test/browser/links/terminalLinkManager.test.ts b/src/vs/workbench/contrib/terminal/test/browser/links/terminalLinkManager.test.ts index f8c340e22fb2e4197c802a096e132b521abd1741..b5e5a01c9a06c74c358f5d0ad1c29c56c43ef412 100644 --- a/src/vs/workbench/contrib/terminal/test/browser/links/terminalLinkManager.test.ts +++ b/src/vs/workbench/contrib/terminal/test/browser/links/terminalLinkManager.test.ts @@ -113,10 +113,10 @@ suite('Workbench - TerminalLinkHandler', () => { if (lineNo) { const lineColumnInfo: LineColumnInfo = terminalLinkHandler.extractLineColumnInfo(link); - assert.equal(lineColumnInfo.lineNumber, lineNo); + assert.equal(lineColumnInfo.lineNumber, lineNo, `For link ${link}, expected line number ${lineNo}, actual ${lineColumnInfo.lineNumber}`); if (columnNo) { - assert.equal(lineColumnInfo.columnNumber, columnNo); + assert.equal(lineColumnInfo.columnNumber, columnNo, `For link ${link}, expected column number ${columnNo}, actual ${lineColumnInfo.columnNumber}`); } } } @@ -190,10 +190,10 @@ suite('Workbench - TerminalLinkHandler', () => { if (lineNo) { const lineColumnInfo: LineColumnInfo = terminalLinkHandler.extractLineColumnInfo(link); - assert.equal(lineColumnInfo.lineNumber, lineNo); + assert.equal(lineColumnInfo.lineNumber, lineNo, `For link ${link}, expected line number ${lineNo}, actual ${lineColumnInfo.lineNumber}`); if (columnNo) { - assert.equal(lineColumnInfo.columnNumber, columnNo); + assert.equal(lineColumnInfo.columnNumber, columnNo, `For link ${link}, expected column number ${columnNo}, actual ${lineColumnInfo.columnNumber}`); } } }