@opensumi/ide-terminal-next 3.6.5-next-1736131247.0 → 3.6.5-next-1736135639.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/links/validated-local-link-provider.d.ts +4 -10
- package/lib/browser/links/validated-local-link-provider.d.ts.map +1 -1
- package/lib/browser/links/validated-local-link-provider.js +32 -46
- package/lib/browser/links/validated-local-link-provider.js.map +1 -1
- package/package.json +18 -18
- package/src/browser/links/validated-local-link-provider.ts +38 -48
|
@@ -5,16 +5,10 @@ import { TerminalLink } from './link';
|
|
|
5
5
|
import { XtermLinkMatcherHandler } from './link-manager';
|
|
6
6
|
import type { TerminalClient } from '../terminal.client';
|
|
7
7
|
import type { IViewportRange, Terminal } from '@xterm/xterm';
|
|
8
|
-
/**
|
|
9
|
-
* A regex that matches non-Windows paths, such as `/foo`, `~/foo`, `./foo`, `../foo` and
|
|
10
|
-
* `foo/bar`.
|
|
11
|
-
*/
|
|
8
|
+
/** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
|
|
12
9
|
export declare const unixLocalLinkClause: string;
|
|
13
|
-
export declare const winDrivePrefix = "(
|
|
14
|
-
/**
|
|
15
|
-
* A regex that matches Windows paths, such as `\\?\c:\foo`, `c:\foo`, `~\foo`, `.\foo`, `..\foo`
|
|
16
|
-
* and `foo\bar`.
|
|
17
|
-
*/
|
|
10
|
+
export declare const winDrivePrefix = "(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:";
|
|
11
|
+
/** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
|
|
18
12
|
export declare const winLocalLinkClause: string;
|
|
19
13
|
/** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
|
|
20
14
|
replacing space with nonBreakningSpace or space ASCII code - 32. */
|
|
@@ -39,7 +33,7 @@ export declare class TerminalValidatedLocalLinkProvider extends TerminalBaseLink
|
|
|
39
33
|
isDirectory: boolean;
|
|
40
34
|
} | undefined) => void) => void);
|
|
41
35
|
protected _provideLinks(y: number): Promise<TerminalLink[]>;
|
|
42
|
-
private
|
|
36
|
+
private detectLocalLink;
|
|
43
37
|
protected get _localLinkRegex(): RegExp;
|
|
44
38
|
private _handleLocalFolderLink;
|
|
45
39
|
private _isDirectoryInsideWorkspace;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validated-local-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAkB,WAAW,EAAmB,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAG9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAA6E,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAe,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"validated-local-link-provider.d.ts","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAkB,WAAW,EAAmB,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAG9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAA6E,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAe,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAO1E,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QASvB,CAAC;AAEV,eAAO,MAAM,cAAc,kCAAkC,CAAC;AAI9D,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,QAStB,CAAC;AAEV;mEACmE;AACnE,eAAO,MAAM,mBAAmB,QASE,CAAC;AAGnC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAG9C,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAI/C,qBACa,kCAAmC,SAAQ,wBAAwB;IAiB5E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAGjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAMjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IA3BtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAGpC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IAGjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAGhD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAGnB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,cAAc,EACvB,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5E,gBAAgB,EAAE,CACjC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,KAC3D,uBAAuB,EACX,gBAAgB,EAAE,CACjC,IAAI,EAAE,YAAY,EAClB,aAAa,EAAE,cAAc,EAC7B,oBAAoB,CAAC,EAAE,MAAM,IAAI,EACjC,kBAAkB,CAAC,EAAE,MAAM,IAAI,KAC5B,WAAW,EACC,mBAAmB,EAAE,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,KAAK,IAAI,KACvE,IAAI;cAKK,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA0EnD,eAAe;IA0D7B,SAAS,KAAK,eAAe,IAAI,MAAM,CAItC;YAEa,sBAAsB;YAatB,2BAA2B;CAS1C"}
|
|
@@ -15,47 +15,34 @@ const workspace_interface_1 = require("@opensumi/ide-workspace/lib/common/worksp
|
|
|
15
15
|
const base_1 = require("./base");
|
|
16
16
|
const helpers_1 = require("./helpers");
|
|
17
17
|
const link_1 = require("./link");
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* A regex that matches non-Windows paths, such as `/foo`, `~/foo`, `./foo`, `../foo` and
|
|
33
|
-
* `foo/bar`.
|
|
34
|
-
*/
|
|
35
|
-
exports.unixLocalLinkClause = '(?:(?:' +
|
|
36
|
-
RegexPathConstants.PathPrefix +
|
|
37
|
-
'|(?:' +
|
|
38
|
-
RegexPathConstants.ExcludedStartPathCharactersClause +
|
|
39
|
-
RegexPathConstants.ExcludedPathCharactersClause +
|
|
40
|
-
'*))?(?:' +
|
|
41
|
-
RegexPathConstants.PathSeparatorClause +
|
|
42
|
-
'(?:' +
|
|
43
|
-
RegexPathConstants.ExcludedPathCharactersClause +
|
|
18
|
+
const pathPrefix = '(\\.\\.?|\\~)';
|
|
19
|
+
const pathSeparatorClause = '\\/';
|
|
20
|
+
// '":; are allowed in paths but they are often separators so ignore them
|
|
21
|
+
// Also disallow \\ to prevent a catastropic backtracking case #24795
|
|
22
|
+
const excludedPathCharactersClause = '[^\\0\\s!`&*()\\[\\]\'":;\\\\]';
|
|
23
|
+
/** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
|
|
24
|
+
exports.unixLocalLinkClause = '((' +
|
|
25
|
+
pathPrefix +
|
|
26
|
+
'|(' +
|
|
27
|
+
excludedPathCharactersClause +
|
|
28
|
+
')+)?(' +
|
|
29
|
+
pathSeparatorClause +
|
|
30
|
+
'(' +
|
|
31
|
+
excludedPathCharactersClause +
|
|
44
32
|
')+)+)';
|
|
45
|
-
exports.winDrivePrefix = '(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*/
|
|
50
|
-
exports.winLocalLinkClause = '(
|
|
51
|
-
|
|
52
|
-
'|(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
RegexPathConstants.WinExcludedPathCharactersClause +
|
|
33
|
+
exports.winDrivePrefix = '(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:';
|
|
34
|
+
const winPathPrefix = '(' + exports.winDrivePrefix + '|\\.\\.?|\\~)';
|
|
35
|
+
const winPathSeparatorClause = '(\\\\|\\/)';
|
|
36
|
+
const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!`&*()\\[\\]\'":;]';
|
|
37
|
+
/** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
|
|
38
|
+
exports.winLocalLinkClause = '((' +
|
|
39
|
+
winPathPrefix +
|
|
40
|
+
'|(' +
|
|
41
|
+
winExcludedPathCharactersClause +
|
|
42
|
+
')+)?(' +
|
|
43
|
+
winPathSeparatorClause +
|
|
44
|
+
'(' +
|
|
45
|
+
winExcludedPathCharactersClause +
|
|
59
46
|
')+)+)';
|
|
60
47
|
/** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
|
|
61
48
|
replacing space with nonBreakningSpace or space ASCII code - 32. */
|
|
@@ -108,7 +95,6 @@ let TerminalValidatedLocalLinkProvider = class TerminalValidatedLocalLinkProvide
|
|
|
108
95
|
let match;
|
|
109
96
|
let stringIndex = -1;
|
|
110
97
|
while ((match = rex.exec(text)) !== null) {
|
|
111
|
-
// const link = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];
|
|
112
98
|
let link = match[0];
|
|
113
99
|
if (!link) {
|
|
114
100
|
// something matched but does not comply with the given matchIndex
|
|
@@ -136,20 +122,20 @@ let TerminalValidatedLocalLinkProvider = class TerminalValidatedLocalLinkProvide
|
|
|
136
122
|
link = link.substring(2);
|
|
137
123
|
stringIndex += 2;
|
|
138
124
|
}
|
|
139
|
-
const validatedLinks = await this.
|
|
125
|
+
const validatedLinks = await this.detectLocalLink(link, lines, startLine, stringIndex, 1);
|
|
140
126
|
if (validatedLinks.length > 0) {
|
|
141
127
|
result.push(...validatedLinks);
|
|
142
128
|
}
|
|
143
129
|
}
|
|
144
130
|
if (result.length === 0) {
|
|
145
|
-
const validatedLinks = await this.
|
|
131
|
+
const validatedLinks = await this.detectLocalLink(text, lines, startLine, stringIndex, 2);
|
|
146
132
|
if (validatedLinks.length > 0) {
|
|
147
133
|
result.push(...validatedLinks);
|
|
148
134
|
}
|
|
149
135
|
}
|
|
150
136
|
return result;
|
|
151
137
|
}
|
|
152
|
-
async
|
|
138
|
+
async detectLocalLink(text, bufferLines, startLine, stringIndex, offset) {
|
|
153
139
|
const result = [];
|
|
154
140
|
const validatedLink = await new Promise((r) => {
|
|
155
141
|
this._validationCallback(text, async (result) => {
|
|
@@ -171,7 +157,7 @@ let TerminalValidatedLocalLinkProvider = class TerminalValidatedLocalLinkProvide
|
|
|
171
157
|
const bufferRange = (0, helpers_1.convertLinkRangeToBuffer)(bufferLines, this._xterm.cols, {
|
|
172
158
|
startColumn: stringIndex + 1,
|
|
173
159
|
startLineNumber: 1,
|
|
174
|
-
endColumn: stringIndex + text.length +
|
|
160
|
+
endColumn: stringIndex + text.length + offset,
|
|
175
161
|
endLineNumber: 1,
|
|
176
162
|
}, startLine);
|
|
177
163
|
r(this.injector.get(link_1.TerminalLink, [
|
|
@@ -198,7 +184,7 @@ let TerminalValidatedLocalLinkProvider = class TerminalValidatedLocalLinkProvide
|
|
|
198
184
|
get _localLinkRegex() {
|
|
199
185
|
const baseLocalLinkClause = this._client.os === ide_core_common_1.OperatingSystem.Windows ? exports.winLocalLinkClause : exports.unixLocalLinkClause;
|
|
200
186
|
// Append line and column number regex
|
|
201
|
-
return new RegExp(baseLocalLinkClause);
|
|
187
|
+
return new RegExp(`${baseLocalLinkClause}(${exports.lineAndColumnClause})`);
|
|
202
188
|
}
|
|
203
189
|
async _handleLocalFolderLink(uri) {
|
|
204
190
|
// If the folder is within one of the window's workspaces, focus it in the explorer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validated-local-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG,2KAA2K;;;;AAE3K,qCAA+E;AAC/E,oGAA2F;AAC3F,kEAAuE;AACvE,+DAA8F;AAC9F,gGAA2F;AAE3F,iCAAkD;AAClD,uCAA0E;AAC1E,iCAAiH;AAMjH,
|
|
1
|
+
{"version":3,"file":"validated-local-link-provider.js","sourceRoot":"","sources":["../../../src/browser/links/validated-local-link-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-terminal-next",
|
|
3
|
-
"version": "3.6.5-next-
|
|
3
|
+
"version": "3.6.5-next-1736135639.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src"
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"url": "git@github.com:opensumi/core.git"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@opensumi/ide-connection": "3.6.5-next-
|
|
21
|
-
"@opensumi/ide-core-common": "3.6.5-next-
|
|
22
|
-
"@opensumi/ide-core-node": "3.6.5-next-
|
|
23
|
-
"@opensumi/ide-file-service": "3.6.5-next-
|
|
24
|
-
"@opensumi/ide-utils": "3.6.5-next-
|
|
20
|
+
"@opensumi/ide-connection": "3.6.5-next-1736135639.0",
|
|
21
|
+
"@opensumi/ide-core-common": "3.6.5-next-1736135639.0",
|
|
22
|
+
"@opensumi/ide-core-node": "3.6.5-next-1736135639.0",
|
|
23
|
+
"@opensumi/ide-file-service": "3.6.5-next-1736135639.0",
|
|
24
|
+
"@opensumi/ide-utils": "3.6.5-next-1736135639.0",
|
|
25
25
|
"@xterm/addon-canvas": "0.7.0",
|
|
26
26
|
"@xterm/addon-fit": "0.10.0",
|
|
27
27
|
"@xterm/addon-search": "0.15.0",
|
|
@@ -31,19 +31,19 @@
|
|
|
31
31
|
"os-locale": "^4.0.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@opensumi/ide-components": "3.6.5-next-
|
|
35
|
-
"@opensumi/ide-core-browser": "3.6.5-next-
|
|
36
|
-
"@opensumi/ide-dev-tool": "3.6.5-next-
|
|
37
|
-
"@opensumi/ide-editor": "3.6.5-next-
|
|
38
|
-
"@opensumi/ide-main-layout": "3.6.5-next-
|
|
39
|
-
"@opensumi/ide-monaco": "3.6.5-next-
|
|
40
|
-
"@opensumi/ide-overlay": "3.6.5-next-
|
|
41
|
-
"@opensumi/ide-status-bar": "3.6.5-next-
|
|
42
|
-
"@opensumi/ide-theme": "3.6.5-next-
|
|
43
|
-
"@opensumi/ide-variable": "3.6.5-next-
|
|
44
|
-
"@opensumi/ide-workspace": "3.6.5-next-
|
|
34
|
+
"@opensumi/ide-components": "3.6.5-next-1736135639.0",
|
|
35
|
+
"@opensumi/ide-core-browser": "3.6.5-next-1736135639.0",
|
|
36
|
+
"@opensumi/ide-dev-tool": "3.6.5-next-1736135639.0",
|
|
37
|
+
"@opensumi/ide-editor": "3.6.5-next-1736135639.0",
|
|
38
|
+
"@opensumi/ide-main-layout": "3.6.5-next-1736135639.0",
|
|
39
|
+
"@opensumi/ide-monaco": "3.6.5-next-1736135639.0",
|
|
40
|
+
"@opensumi/ide-overlay": "3.6.5-next-1736135639.0",
|
|
41
|
+
"@opensumi/ide-status-bar": "3.6.5-next-1736135639.0",
|
|
42
|
+
"@opensumi/ide-theme": "3.6.5-next-1736135639.0",
|
|
43
|
+
"@opensumi/ide-variable": "3.6.5-next-1736135639.0",
|
|
44
|
+
"@opensumi/ide-workspace": "3.6.5-next-1736135639.0",
|
|
45
45
|
"@types/http-proxy": "^1.17.2",
|
|
46
46
|
"http-proxy": "^1.18.0"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "3c6e14d0e393604ac7e744384cf2c81295e1e3cc"
|
|
49
49
|
}
|
|
@@ -18,51 +18,37 @@ import { XtermLinkMatcherHandler } from './link-manager';
|
|
|
18
18
|
import type { TerminalClient } from '../terminal.client';
|
|
19
19
|
import type { IBufferLine, IViewportRange, Terminal } from '@xterm/xterm';
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
ExcludedStartPathCharactersClause = '[^\\0<>\\?\\s!`&*()\\[\\]\'":;\\\\]',
|
|
28
|
-
|
|
29
|
-
WinOtherPathPrefix = '\\.\\.?|\\~',
|
|
30
|
-
WinPathSeparatorClause = '(?:\\\\|\\/)',
|
|
31
|
-
WinExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!`&*()\'":;]',
|
|
32
|
-
WinExcludedStartPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!`&*()\\[\\]\'":;]',
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* A regex that matches non-Windows paths, such as `/foo`, `~/foo`, `./foo`, `../foo` and
|
|
36
|
-
* `foo/bar`.
|
|
37
|
-
*/
|
|
21
|
+
const pathPrefix = '(\\.\\.?|\\~)';
|
|
22
|
+
const pathSeparatorClause = '\\/';
|
|
23
|
+
// '":; are allowed in paths but they are often separators so ignore them
|
|
24
|
+
// Also disallow \\ to prevent a catastropic backtracking case #24795
|
|
25
|
+
const excludedPathCharactersClause = '[^\\0\\s!`&*()\\[\\]\'":;\\\\]';
|
|
26
|
+
/** A regex that matches paths in the form /foo, ~/foo, ./foo, ../foo, foo/bar */
|
|
38
27
|
export const unixLocalLinkClause =
|
|
39
|
-
'(
|
|
40
|
-
|
|
41
|
-
'|(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
RegexPathConstants.ExcludedPathCharactersClause +
|
|
28
|
+
'((' +
|
|
29
|
+
pathPrefix +
|
|
30
|
+
'|(' +
|
|
31
|
+
excludedPathCharactersClause +
|
|
32
|
+
')+)?(' +
|
|
33
|
+
pathSeparatorClause +
|
|
34
|
+
'(' +
|
|
35
|
+
excludedPathCharactersClause +
|
|
48
36
|
')+)+)';
|
|
49
37
|
|
|
50
|
-
export const winDrivePrefix = '(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*/
|
|
38
|
+
export const winDrivePrefix = '(?:\\\\\\\\\\?\\\\)?[a-zA-Z]:';
|
|
39
|
+
const winPathPrefix = '(' + winDrivePrefix + '|\\.\\.?|\\~)';
|
|
40
|
+
const winPathSeparatorClause = '(\\\\|\\/)';
|
|
41
|
+
const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!`&*()\\[\\]\'":;]';
|
|
42
|
+
/** A regex that matches paths in the form \\?\c:\foo c:\foo, ~\foo, .\foo, ..\foo, foo\bar */
|
|
56
43
|
export const winLocalLinkClause =
|
|
57
|
-
'(
|
|
58
|
-
|
|
59
|
-
'|(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
RegexPathConstants.WinExcludedPathCharactersClause +
|
|
44
|
+
'((' +
|
|
45
|
+
winPathPrefix +
|
|
46
|
+
'|(' +
|
|
47
|
+
winExcludedPathCharactersClause +
|
|
48
|
+
')+)?(' +
|
|
49
|
+
winPathSeparatorClause +
|
|
50
|
+
'(' +
|
|
51
|
+
winExcludedPathCharactersClause +
|
|
66
52
|
')+)+)';
|
|
67
53
|
|
|
68
54
|
/** As xterm reads from DOM, space in that case is nonbreaking char ASCII code - 160,
|
|
@@ -152,7 +138,6 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
152
138
|
let match;
|
|
153
139
|
let stringIndex = -1;
|
|
154
140
|
while ((match = rex.exec(text)) !== null) {
|
|
155
|
-
// const link = match[typeof matcher.matchIndex !== 'number' ? 0 : matcher.matchIndex];
|
|
156
141
|
let link = match[0];
|
|
157
142
|
if (!link) {
|
|
158
143
|
// something matched but does not comply with the given matchIndex
|
|
@@ -183,8 +168,7 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
183
168
|
link = link.substring(2);
|
|
184
169
|
stringIndex += 2;
|
|
185
170
|
}
|
|
186
|
-
|
|
187
|
-
const validatedLinks = await this.detectedLocalLinks(link, lines, startLine, stringIndex);
|
|
171
|
+
const validatedLinks = await this.detectLocalLink(link, lines, startLine, stringIndex, 1);
|
|
188
172
|
|
|
189
173
|
if (validatedLinks.length > 0) {
|
|
190
174
|
result.push(...validatedLinks);
|
|
@@ -192,7 +176,7 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
192
176
|
}
|
|
193
177
|
|
|
194
178
|
if (result.length === 0) {
|
|
195
|
-
const validatedLinks = await this.
|
|
179
|
+
const validatedLinks = await this.detectLocalLink(text, lines, startLine, stringIndex, 2);
|
|
196
180
|
if (validatedLinks.length > 0) {
|
|
197
181
|
result.push(...validatedLinks);
|
|
198
182
|
}
|
|
@@ -201,7 +185,13 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
201
185
|
return result;
|
|
202
186
|
}
|
|
203
187
|
|
|
204
|
-
private async
|
|
188
|
+
private async detectLocalLink(
|
|
189
|
+
text: string,
|
|
190
|
+
bufferLines: IBufferLine[],
|
|
191
|
+
startLine: number,
|
|
192
|
+
stringIndex: number,
|
|
193
|
+
offset,
|
|
194
|
+
) {
|
|
205
195
|
const result: TerminalLink[] = [];
|
|
206
196
|
const validatedLink = await new Promise<TerminalLink | undefined>((r) => {
|
|
207
197
|
this._validationCallback(text, async (result) => {
|
|
@@ -225,7 +215,7 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
225
215
|
{
|
|
226
216
|
startColumn: stringIndex + 1,
|
|
227
217
|
startLineNumber: 1,
|
|
228
|
-
endColumn: stringIndex + text.length +
|
|
218
|
+
endColumn: stringIndex + text.length + offset,
|
|
229
219
|
endLineNumber: 1,
|
|
230
220
|
},
|
|
231
221
|
startLine,
|
|
@@ -256,7 +246,7 @@ export class TerminalValidatedLocalLinkProvider extends TerminalBaseLinkProvider
|
|
|
256
246
|
protected get _localLinkRegex(): RegExp {
|
|
257
247
|
const baseLocalLinkClause = this._client.os === OperatingSystem.Windows ? winLocalLinkClause : unixLocalLinkClause;
|
|
258
248
|
// Append line and column number regex
|
|
259
|
-
return new RegExp(baseLocalLinkClause);
|
|
249
|
+
return new RegExp(`${baseLocalLinkClause}(${lineAndColumnClause})`);
|
|
260
250
|
}
|
|
261
251
|
|
|
262
252
|
private async _handleLocalFolderLink(uri: URI): Promise<void> {
|