Code change:
<!-- Do you have a question? Please ask it on --- VSCode Version: 1.10.2 OS Version: Mac OSX (10.11.6) Steps to Reproduce: VS Code integrated terminal a relative path (eg. ) Description: Let's say you have a build system that outputs a stack trace on a build error or failed test. If this was run from the integrated terminal, the file paths in the output should be included as clickable links which can be clicked to open the file in VSCode. However, this only works if the path is either an absolute path (e.g. ) or a relative path that begins with "./". Many build systems and tools output file paths relative to the directory the command was run, without the leading "./", Karma for example. So the output would be something like: , not . The first is not matched by VSCode as an openable path, but the second is. I believe that what is determined to be a path comes from the Regex in "" Is there a reason why relative paths of this form (e.g. no leading "./") are not included?
The reason was because until 1.11 links aren't validated so there would be heaps of false positives. Performance was also a factor but it shouldn't impact that much really now that I think about it. Now that links are validated maybe we should be more lenient when linkifying.
I'll assign this to April but if someone wants to do a PR before then you're welcome. You will need to: Modify the regex to allow paths that are not qualified with , , etc. Make sure that the new path matcher does not conflict with previously matched links and does not create links with adjacent characters. Eg. we want to avoid this:
Nice. I'll write a PR...
That would be awesome :+1:
Fixed in

Related discussion:
text: testLink('./foo'); testLink('../foo'); testLink('/a/long/path'); <ins> testLink('a/relative/path'); }); }); suite('preprocessPath', () => { test('Windows', () => { const linkHandler = new TestTerminalLinkHandler(null, new TestXterm(), Platform.Windows, null, new WorkspaceContextService(new TestWorkspace('C:base'))); let stub = sinon.stub(path, 'join', function (arg1, arg2) { return arg1 + '' + arg2; }); assert.equal(linkHandler.preprocessPath('./src/file1'), 'C:base./src/file1'); assert.equal(linkHandler.preprocessPath('srcfile2'), 'C:basesrcfile2'); assert.equal(linkHandler.preprocessPath('C:absolutepathfile3'), 'C:absolutepathfile3'); stub.restore(); }); test('Linux', () => { const linkHandler = new TestTerminalLinkHandler(null, new TestXterm(), Platform.Linux, null, new WorkspaceContextService(new TestWorkspace('/base'))); let stub = sinon.stub(path, 'join', function (arg1, arg2) { return arg1 + '/' + arg2; }); assert.equal(linkHandler.preprocessPath('./src/file1'), '/base/./src/file1'); assert.equal(linkHandler.preprocessPath('src/file2'), '/base/src/file2'); assert.equal(linkHandler.preprocessPath('/absolute/path/file3'), '/absolute/path/file3'); stub.restore(); }); test('No Workspace', () => { const linkHandler = new TestTerminalLinkHandler(null, new TestXterm(), Platform.Linux, null, new WorkspaceContextService(null)); assert.equal(linkHandler.preprocessPath('./src/file1'), null); assert.equal(linkHandler.preprocessPath('src/file2'), null); assert.equal(linkHandler.preprocessPath('/absolute/path/file3'), '/absolute/path/file3'); </ins> }); }); });  No newline at end of file