-
Notifications
You must be signed in to change notification settings - Fork 38.9k
Adopt xterm.js link provider API #90298
Copy link
Copy link
Closed
Labels
debtCode quality issuesCode quality issuesfeature-requestRequest for new features or functionalityRequest for new features or functionalityon-testplanterminalGeneral terminal issues that don't fall under another labelGeneral terminal issues that don't fall under another label
Milestone
Description
Added in xtermjs/xterm.js#2530
This is part of #21125, to add a setting to opt into link detection based on VS Code's shared system. To close out #21125 we would need to make sure it all works and then properly support the local link system (and spaces in paths) done by this:
| const pathPrefix = '(\\.\\.?|\\~)'; | |
| const pathSeparatorClause = '\\/'; | |
| // '":; are allowed in paths but they are often separators so ignore them | |
| // Also disallow \\ to prevent a catastropic backtracking case #24798 | |
| const excludedPathCharactersClause = '[^\\0\\s!$`&*()\\[\\]+\'":;\\\\]'; | |
| /** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */ | |
| const unixLocalLinkClause = '((' + pathPrefix + '|(' + excludedPathCharactersClause + ')+)?(' + pathSeparatorClause + '(' + excludedPathCharactersClause + ')+)+)'; | |
| const winDrivePrefix = '[a-zA-Z]:'; | |
| const winPathPrefix = '(' + winDrivePrefix + '|\\.\\.?|\\~)'; | |
| const winPathSeparatorClause = '(\\\\|\\/)'; | |
| const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!$`&*()\\[\\]+\'":;]'; | |
| /** A regex that matches paths in the form c:\foo, ~\foo, .\foo, ..\foo, foo\bar */ | |
| const winLocalLinkClause = '((' + winPathPrefix + '|(' + winExcludedPathCharactersClause + ')+)?(' + winPathSeparatorClause + '(' + winExcludedPathCharactersClause + ')+)+)'; | |
| /** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160, | |
| replacing space with nonBreakningSpace or space ASCII code - 32. */ | |
| const lineAndColumnClause = [ | |
| '((\\S*)", line ((\\d+)( column (\\d+))?))', // "(file path)", line 45 [see #40468] | |
| '((\\S*)",((\\d+)(:(\\d+))?))', // "(file path)",45 [see #78205] | |
| '((\\S*) on line ((\\d+)(, column (\\d+))?))', // (file path) on line 8, column 13 | |
| '((\\S*):line ((\\d+)(, column (\\d+))?))', // (file path):line 8, column 13 | |
| '(([^\\s\\(\\)]*)(\\s?[\\(\\[](\\d+)(,\\s?(\\d+))?)[\\)\\]])', // (file path)(45), (file path) (45), (file path)(45,18), (file path) (45,18), (file path)(45, 18), (file path) (45, 18), also with [] | |
| '(([^:\\s\\(\\)<>\'\"\\[\\]]*)(:(\\d+))?(:(\\d+))?)' // (file path):336, (file path):336:9 | |
| ].join('|').replace(/ /g, `[${'\u00A0'} ]`); |
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
debtCode quality issuesCode quality issuesfeature-requestRequest for new features or functionalityRequest for new features or functionalityon-testplanterminalGeneral terminal issues that don't fall under another labelGeneral terminal issues that don't fall under another label