mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-13 03:28:33 -05:00
93 lines
3.6 KiB
TypeScript
93 lines
3.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { startsWith } from 'vs/base/common/strings';
|
|
import { ILogService } from 'vs/platform/log/common/log';
|
|
import { SearchRange, TextSearchMatch } from 'vs/platform/search/common/search';
|
|
import * as vscode from 'vscode';
|
|
import { mapArrayOrNot } from 'vs/base/common/arrays';
|
|
|
|
export type Maybe<T> = T | null | undefined;
|
|
|
|
export function anchorGlob(glob: string): string {
|
|
return startsWith(glob, '**') || startsWith(glob, '/') ? glob : `/${glob}`;
|
|
}
|
|
|
|
/**
|
|
* Create a vscode.TextSearchResult by using our internal TextSearchResult type for its previewOptions logic.
|
|
*/
|
|
export function createTextSearchResult(uri: vscode.Uri, text: string, range: Range | Range[], previewOptions?: vscode.TextSearchPreviewOptions): vscode.TextSearchMatch {
|
|
const searchRange = mapArrayOrNot(range, rangeToSearchRange);
|
|
|
|
const internalResult = new TextSearchMatch(text, searchRange, previewOptions);
|
|
const internalPreviewRange = internalResult.preview.matches;
|
|
return {
|
|
ranges: mapArrayOrNot(searchRange, searchRangeToRange),
|
|
uri,
|
|
preview: {
|
|
text: internalResult.preview.text,
|
|
matches: mapArrayOrNot(internalPreviewRange, searchRangeToRange)
|
|
}
|
|
};
|
|
}
|
|
|
|
function rangeToSearchRange(range: Range): SearchRange {
|
|
return new SearchRange(range.start.line, range.start.character, range.end.line, range.end.character);
|
|
}
|
|
|
|
function searchRangeToRange(range: SearchRange): Range {
|
|
return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);
|
|
}
|
|
|
|
export class Position {
|
|
constructor(readonly line, readonly character) { }
|
|
|
|
isBefore(other: Position): boolean { return false; }
|
|
isBeforeOrEqual(other: Position): boolean { return false; }
|
|
isAfter(other: Position): boolean { return false; }
|
|
isAfterOrEqual(other: Position): boolean { return false; }
|
|
isEqual(other: Position): boolean { return false; }
|
|
compareTo(other: Position): number { return 0; }
|
|
translate(lineDelta?: number, characterDelta?: number): Position;
|
|
translate(change: { lineDelta?: number; characterDelta?: number; }): Position;
|
|
translate(_?: any, _2?: any): Position { return new Position(0, 0); }
|
|
with(line?: number, character?: number): Position;
|
|
with(change: { line?: number; character?: number; }): Position;
|
|
with(_: any): Position { return new Position(0, 0); }
|
|
}
|
|
|
|
export class Range {
|
|
readonly start: Position;
|
|
readonly end: Position;
|
|
|
|
constructor(startLine: number, startCol: number, endLine: number, endCol: number) {
|
|
this.start = new Position(startLine, startCol);
|
|
this.end = new Position(endLine, endCol);
|
|
}
|
|
|
|
isEmpty: boolean;
|
|
isSingleLine: boolean;
|
|
contains(positionOrRange: Position | Range): boolean { return false; }
|
|
isEqual(other: Range): boolean { return false; }
|
|
intersection(range: Range): Range | undefined { return undefined; }
|
|
union(other: Range): Range { return new Range(0, 0, 0, 0); }
|
|
|
|
with(start?: Position, end?: Position): Range;
|
|
with(change: { start?: Position, end?: Position }): Range;
|
|
with(_: any): Range { return new Range(0, 0, 0, 0); }
|
|
}
|
|
|
|
export interface IOutputChannel {
|
|
appendLine(msg: string): void;
|
|
}
|
|
|
|
export class OutputChannel implements IOutputChannel {
|
|
constructor(@ILogService private readonly logService: ILogService) { }
|
|
|
|
appendLine(msg: string): void {
|
|
this.logService.debug('RipgrepSearchEH#search', msg);
|
|
}
|
|
}
|