mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-15 02:48:30 -05:00
Merge from vscode ad407028575a77ea387eb7cc219b323dc017b686
This commit is contained in:
committed by
Anthony Dresser
parent
404260b8a0
commit
4ad73d381c
@@ -1286,6 +1286,10 @@ class EditorEmptySelectionClipboard extends EditorBooleanOption<EditorOption.emp
|
||||
* Configuration options for editor find widget
|
||||
*/
|
||||
export interface IEditorFindOptions {
|
||||
/**
|
||||
* Controls whether the cursor should move to find matches while typing.
|
||||
*/
|
||||
cursorMoveOnType?: boolean;
|
||||
/**
|
||||
* Controls if we seed search string in the Find Widget with editor selection.
|
||||
*/
|
||||
@@ -1315,6 +1319,7 @@ class EditorFind extends BaseEditorOption<EditorOption.find, EditorFindOptions>
|
||||
|
||||
constructor() {
|
||||
const defaults: EditorFindOptions = {
|
||||
cursorMoveOnType: true,
|
||||
seedSearchStringFromSelection: true,
|
||||
autoFindInSelection: 'never',
|
||||
globalFindClipboard: false,
|
||||
@@ -1324,6 +1329,11 @@ class EditorFind extends BaseEditorOption<EditorOption.find, EditorFindOptions>
|
||||
super(
|
||||
EditorOption.find, 'find', defaults,
|
||||
{
|
||||
'editor.find.cursorMoveOnType': {
|
||||
type: 'boolean',
|
||||
default: defaults.cursorMoveOnType,
|
||||
description: nls.localize('find.cursorMoveOnType', "Controls whether the cursor should jump to find matches while typing.")
|
||||
},
|
||||
'editor.find.seedSearchStringFromSelection': {
|
||||
type: 'boolean',
|
||||
default: defaults.seedSearchStringFromSelection,
|
||||
@@ -1367,6 +1377,7 @@ class EditorFind extends BaseEditorOption<EditorOption.find, EditorFindOptions>
|
||||
}
|
||||
const input = _input as IEditorFindOptions;
|
||||
return {
|
||||
cursorMoveOnType: EditorBooleanOption.boolean(input.cursorMoveOnType, this.defaultValue.cursorMoveOnType),
|
||||
seedSearchStringFromSelection: EditorBooleanOption.boolean(input.seedSearchStringFromSelection, this.defaultValue.seedSearchStringFromSelection),
|
||||
autoFindInSelection: typeof _input.autoFindInSelection === 'boolean'
|
||||
? (_input.autoFindInSelection ? 'always' : 'never')
|
||||
|
||||
@@ -317,9 +317,10 @@ export class CursorMoveCommands {
|
||||
// Move to the last non-whitespace column of the current view line
|
||||
return this._moveToViewLastNonWhitespaceColumn(viewModel, cursors, inSelectionMode);
|
||||
}
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static viewportMove(viewModel: IViewModel, cursors: CursorState[], direction: CursorMove.ViewportDirection, inSelectionMode: boolean, value: number): PartialCursorState[] | null {
|
||||
@@ -353,9 +354,9 @@ export class CursorMoveCommands {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static findPositionInViewportIfOutside(viewModel: IViewModel, cursor: CursorState, visibleViewRange: Range, inSelectionMode: boolean): PartialCursorState {
|
||||
|
||||
@@ -800,7 +800,7 @@ export interface ITextModel {
|
||||
/**
|
||||
* Search the model.
|
||||
* @param searchString The string used to search. If it is a regular expression, set `isRegex` to true.
|
||||
* @param searchScope Limit the searching to only search inside this range.
|
||||
* @param searchScope Limit the searching to only search inside these ranges.
|
||||
* @param isRegex Used to indicate that `searchString` is a regular expression.
|
||||
* @param matchCase Force the matching to match lower/upper case exactly.
|
||||
* @param wordSeparators Force the matching to match entire words only. Pass null otherwise.
|
||||
@@ -808,7 +808,7 @@ export interface ITextModel {
|
||||
* @param limitResultCount Limit the number of results
|
||||
* @return The ranges where the matches are. It is empty if no matches have been found.
|
||||
*/
|
||||
findMatches(searchString: string, searchScope: IRange, isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean, limitResultCount?: number): FindMatch[];
|
||||
findMatches(searchString: string, searchScope: IRange | IRange[], isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean, limitResultCount?: number): FindMatch[];
|
||||
/**
|
||||
* Search the model for the next match. Loops to the beginning of the model if needed.
|
||||
* @param searchString The string used to search. If it is a regular expression, set `isRegex` to true.
|
||||
|
||||
@@ -214,8 +214,9 @@ export class PieceTreeTextBuffer implements ITextBuffer, IDisposable {
|
||||
return '\r\n';
|
||||
case EndOfLinePreference.TextDefined:
|
||||
return this.getEOL();
|
||||
default:
|
||||
throw new Error('Unknown EOL preference');
|
||||
}
|
||||
throw new Error('Unknown EOL preference');
|
||||
}
|
||||
|
||||
public setEOL(newEOL: '\r\n' | '\n'): void {
|
||||
|
||||
@@ -1121,13 +1121,35 @@ export class TextModel extends Disposable implements model.ITextModel {
|
||||
public findMatches(searchString: string, rawSearchScope: any, isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean, limitResultCount: number = LIMIT_FIND_COUNT): model.FindMatch[] {
|
||||
this._assertNotDisposed();
|
||||
|
||||
let searchRange: Range;
|
||||
if (Range.isIRange(rawSearchScope)) {
|
||||
searchRange = this.validateRange(rawSearchScope);
|
||||
} else {
|
||||
searchRange = this.getFullModelRange();
|
||||
let searchRanges: Range[] | null = null;
|
||||
|
||||
if (rawSearchScope !== null) {
|
||||
if (!Array.isArray(rawSearchScope)) {
|
||||
rawSearchScope = [rawSearchScope];
|
||||
}
|
||||
|
||||
if (rawSearchScope.every((searchScope: Range) => Range.isIRange(searchScope))) {
|
||||
searchRanges = rawSearchScope.map((searchScope: Range) => this.validateRange(searchScope));
|
||||
}
|
||||
}
|
||||
|
||||
if (searchRanges === null) {
|
||||
searchRanges = [this.getFullModelRange()];
|
||||
}
|
||||
|
||||
searchRanges = searchRanges.sort((d1, d2) => d1.startLineNumber - d2.startLineNumber || d1.startColumn - d2.startColumn);
|
||||
|
||||
const uniqueSearchRanges: Range[] = [];
|
||||
uniqueSearchRanges.push(searchRanges.reduce((prev, curr) => {
|
||||
if (Range.areIntersecting(prev, curr)) {
|
||||
return prev.plusRange(curr);
|
||||
}
|
||||
|
||||
uniqueSearchRanges.push(prev);
|
||||
return curr;
|
||||
}));
|
||||
|
||||
let matchMapper: (value: Range, index: number, array: Range[]) => model.FindMatch[];
|
||||
if (!isRegex && searchString.indexOf('\n') < 0) {
|
||||
// not regex, not multi line
|
||||
const searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);
|
||||
@@ -1137,10 +1159,12 @@ export class TextModel extends Disposable implements model.ITextModel {
|
||||
return [];
|
||||
}
|
||||
|
||||
return this.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);
|
||||
matchMapper = (searchRange: Range) => this.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);
|
||||
} else {
|
||||
matchMapper = (searchRange: Range) => TextModelSearch.findMatches(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchRange, captureMatches, limitResultCount);
|
||||
}
|
||||
|
||||
return TextModelSearch.findMatches(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchRange, captureMatches, limitResultCount);
|
||||
return uniqueSearchRanges.map(matchMapper).reduce((arr, matches: model.FindMatch[]) => arr.concat(matches), []);
|
||||
}
|
||||
|
||||
public findNextMatch(searchString: string, rawSearchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string, captureMatches: boolean): model.FindMatch | null {
|
||||
|
||||
@@ -813,12 +813,12 @@ export interface DocumentHighlightProvider {
|
||||
*/
|
||||
export interface OnTypeRenameProvider {
|
||||
|
||||
stopPattern?: RegExp;
|
||||
wordPattern?: RegExp;
|
||||
|
||||
/**
|
||||
* Provide a list of ranges that can be live-renamed together.
|
||||
*/
|
||||
provideOnTypeRenameRanges(model: model.ITextModel, position: Position, token: CancellationToken): ProviderResult<IRange[]>;
|
||||
provideOnTypeRenameRanges(model: model.ITextModel, position: Position, token: CancellationToken): ProviderResult<{ ranges: IRange[]; wordPattern?: RegExp; }>;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user