提交 a354eb8b 编写于 作者: D Daniel Imms

Rename to validated

上级 4da7703e
......@@ -22,7 +22,7 @@ import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent';
import { Emitter, Event } from 'vs/base/common/event';
import { ILogService } from 'vs/platform/log/common/log';
import { TerminalWebLinkProvider } from 'vs/workbench/contrib/terminal/browser/links/terminalWebLinkProvider';
import { TerminalRegexLocalLinkProvider } from 'vs/workbench/contrib/terminal/browser/links/terminalRegexLocalLinkProvider';
import { TerminalValidatedLocalLinkProvider } from 'vs/workbench/contrib/terminal/browser/links/terminalValidatedLocalLinkProvider';
const pathPrefix = '(\\.\\.?|\\~)';
const pathSeparatorClause = '\\/';
......@@ -83,6 +83,7 @@ export class TerminalLinkManager extends DisposableStore {
private _linkMatchers: number[] = [];
private _webLinksAddon: ITerminalAddon | undefined;
private _linkProvider: IDisposable | undefined;
private _linkProvider2: IDisposable | undefined;
private _hasBeforeHandleLinkListeners = false;
protected static _LINK_INTERCEPT_THRESHOLD = LINK_INTERCEPT_THRESHOLD;
......@@ -174,6 +175,7 @@ export class TerminalLinkManager extends DisposableStore {
this.registerLinkProvider();
} else {
this._linkProvider?.dispose();
this._linkProvider2?.dispose();
this._registerLinkMatchers();
}
}
......@@ -292,7 +294,7 @@ export class TerminalLinkManager extends DisposableStore {
this._tooltipCallback(event, link, location, this._handleLocalLink.bind(this, link));
};
const wrappedLinkActivateCallback = this._wrapLinkHandler(this._handleLocalLink.bind(this));
this._linkProvider = this._xterm.registerLinkProvider(new TerminalRegexLocalLinkProvider(this._xterm, this._processManager.os || OS, wrappedLinkActivateCallback, tooltipLinkCallback, this._leaveCallback, this._validateLocalLink.bind(this)));
this._linkProvider2 = this._xterm.registerLinkProvider(new TerminalValidatedLocalLinkProvider(this._xterm, this._processManager.os || OS, wrappedLinkActivateCallback, tooltipLinkCallback, this._leaveCallback, this._validateLocalLink.bind(this)));
}
protected _wrapLinkHandler(handler: (link: string) => void): XtermLinkMatcherHandler {
......
......@@ -33,14 +33,7 @@ const lineAndColumnClause = [
'(([^:\\s\\(\\)<>\'\"\\[\\]]*)(:(\\d+))?(:(\\d+))?)' // (file path):336, (file path):336:9
].join('|').replace(/ /g, `[${'\u00A0'} ]`);
// Changing any regex may effect this value, hence changes this as well if required.
// const winLineAndColumnMatchIndex = 12;
// const unixLineAndColumnMatchIndex = 11;
// Each line and column clause have 6 groups (ie no. of expressions in round brackets)
// const lineAndColumnClauseGroupCount = 6;
export class TerminalRegexLocalLinkProvider implements ILinkProvider {
export class TerminalValidatedLocalLinkProvider implements ILinkProvider {
constructor(
private readonly _xterm: Terminal,
private readonly _processOperatingSystem: OperatingSystem,
......@@ -139,17 +132,4 @@ export class TerminalRegexLocalLinkProvider implements ILinkProvider {
// Append line and column number regex
return new RegExp(`${baseLocalLinkClause}(${lineAndColumnClause})`);
}
// private _positionIsInRange(position: IBufferCellPosition, range: IBufferRange): boolean {
// if (position.y < range.start.y || position.y > range.end.y) {
// return false;
// }
// if (position.y === range.start.y && position.x < range.start.x) {
// return false;
// }
// if (position.y === range.end.y && position.x > range.end.x) {
// return false;
// }
// return true;
// }
}
......@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import { TerminalRegexLocalLinkProvider } from 'vs/workbench/contrib/terminal/browser/links/terminalRegexLocalLinkProvider';
import { TerminalValidatedLocalLinkProvider } from 'vs/workbench/contrib/terminal/browser/links/terminalValidatedLocalLinkProvider';
import { Terminal, ILink, IBufferRange, IBufferCellPosition } from 'xterm';
import { OperatingSystem } from 'vs/base/common/platform';
import { format } from 'vs/base/common/strings';
......@@ -63,11 +63,11 @@ const supportedLinkFormats: LinkFormatInfo[] = [
{ urlFormat: '{0}",{1}', line: '5' }
];
suite('Workbench - TerminalRegexLocalLinkProvider', () => {
suite('Workbench - TerminalValidatedLocalLinkProvider', () => {
async function assertLink(text: string, os: OperatingSystem, expected: { text: string, range: [number, number][] }) {
const xterm = new Terminal();
// TODO: Test process manager
const provider = new TerminalRegexLocalLinkProvider(xterm, os, () => { }, () => { }, () => { }, (_, cb) => { cb(true); });
const provider = new TerminalValidatedLocalLinkProvider(xterm, os, () => { }, () => { }, () => { }, (_, cb) => { cb(true); });
// Write the text and wait for the parser to finish
await new Promise<void>(r => xterm.write(text, r));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册