mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-20 12:00:24 -04:00
Merge from vscode 6268feb42ba4f2e2fa15484e88c9af60d254998c (#6530)
This commit is contained in:
@@ -485,7 +485,7 @@ export class FindModelBoundToEditorModel {
|
||||
let resultText: string;
|
||||
const preserveCase = this._state.preserveCase;
|
||||
|
||||
if (replacePattern.hasReplacementPatterns) {
|
||||
if (replacePattern.hasReplacementPatterns || preserveCase) {
|
||||
resultText = modelText.replace(searchRegex, function () {
|
||||
return replacePattern.buildReplaceString(<string[]><any>arguments, preserveCase);
|
||||
});
|
||||
@@ -500,7 +500,7 @@ export class FindModelBoundToEditorModel {
|
||||
private _regularReplaceAll(findScope: Range | null): void {
|
||||
const replacePattern = this._getReplacePattern();
|
||||
// Get all the ranges (even more than the highlighted ones)
|
||||
let matches = this._findMatches(findScope, replacePattern.hasReplacementPatterns, Constants.MAX_SAFE_SMALL_INTEGER);
|
||||
let matches = this._findMatches(findScope, replacePattern.hasReplacementPatterns || this._state.preserveCase, Constants.MAX_SAFE_SMALL_INTEGER);
|
||||
|
||||
let replaceStrings: string[] = [];
|
||||
for (let i = 0, len = matches.length; i < len; i++) {
|
||||
|
||||
@@ -929,7 +929,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas
|
||||
}));
|
||||
|
||||
this._preserveCase = this._register(new Checkbox({
|
||||
actionClassName: 'monaco-case-sensitive',
|
||||
actionClassName: 'monaco-preserve-case',
|
||||
title: NLS_PRESERVE_CASE_LABEL,
|
||||
isChecked: false,
|
||||
}));
|
||||
|
||||
@@ -1947,6 +1947,42 @@ suite('FindModel', () => {
|
||||
findState.dispose();
|
||||
});
|
||||
|
||||
findTest('replaceAll preserving case', (editor, cursor) => {
|
||||
let findState = new FindReplaceState();
|
||||
findState.change({ searchString: 'hello', replaceString: 'goodbye', isRegex: false, matchCase: false, preserveCase: true }, false);
|
||||
let findModel = new FindModelBoundToEditorModel(editor, findState);
|
||||
|
||||
assertFindState(
|
||||
editor,
|
||||
[1, 1, 1, 1],
|
||||
null,
|
||||
[
|
||||
[6, 14, 6, 19],
|
||||
[6, 27, 6, 32],
|
||||
[7, 14, 7, 19],
|
||||
[8, 14, 8, 19],
|
||||
[9, 14, 9, 19],
|
||||
]
|
||||
);
|
||||
|
||||
findModel.replaceAll();
|
||||
|
||||
assert.equal(editor.getModel()!.getLineContent(6), ' cout << "goodbye world, Goodbye!" << endl;');
|
||||
assert.equal(editor.getModel()!.getLineContent(7), ' cout << "goodbye world again" << endl;');
|
||||
assert.equal(editor.getModel()!.getLineContent(8), ' cout << "Goodbye world again" << endl;');
|
||||
assert.equal(editor.getModel()!.getLineContent(9), ' cout << "goodbyeworld again" << endl;');
|
||||
|
||||
assertFindState(
|
||||
editor,
|
||||
[1, 1, 1, 1],
|
||||
null,
|
||||
[]
|
||||
);
|
||||
|
||||
findModel.dispose();
|
||||
findState.dispose();
|
||||
});
|
||||
|
||||
findTest('issue #18711 replaceAll with empty string', (editor, cursor) => {
|
||||
let findState = new FindReplaceState();
|
||||
findState.change({ searchString: 'hello', replaceString: '', wholeWord: true }, false);
|
||||
|
||||
@@ -27,6 +27,7 @@ import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/c
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { coalesce, flatten } from 'vs/base/common/arrays';
|
||||
|
||||
export const defaultReferenceSearchOptions: RequestOptions = {
|
||||
getMetaTitle(model) {
|
||||
@@ -287,15 +288,7 @@ export function provideReferences(model: ITextModel, position: Position, token:
|
||||
});
|
||||
});
|
||||
|
||||
return Promise.all(promises).then(references => {
|
||||
let result: Location[] = [];
|
||||
for (let ref of references) {
|
||||
if (ref) {
|
||||
result.push(...ref);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
});
|
||||
return Promise.all(promises).then(references => flatten(coalesce(references)));
|
||||
}
|
||||
|
||||
registerDefaultLanguageCommand('_executeReferenceProvider', (model, position) => provideReferences(model, position, CancellationToken.None));
|
||||
|
||||
@@ -7,8 +7,6 @@ import * as nls from 'vs/nls';
|
||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||
import { EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions';
|
||||
import { StopWatch } from 'vs/base/common/stopwatch';
|
||||
import { StandardTokenType } from 'vs/editor/common/modes';
|
||||
import { ITextModel } from 'vs/editor/common/model';
|
||||
|
||||
class ForceRetokenizeAction extends EditorAction {
|
||||
constructor() {
|
||||
@@ -31,51 +29,6 @@ class ForceRetokenizeAction extends EditorAction {
|
||||
sw.stop();
|
||||
console.log(`tokenization took ${sw.elapsed()}`);
|
||||
|
||||
if (!true) {
|
||||
extractTokenTypes(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function extractTokenTypes(model: ITextModel): void {
|
||||
const eolLength = model.getEOL().length;
|
||||
let result: number[] = [];
|
||||
let resultLen: number = 0;
|
||||
let lastTokenType: StandardTokenType = StandardTokenType.Other;
|
||||
let lastEndOffset: number = 0;
|
||||
let offset = 0;
|
||||
for (let lineNumber = 1, lineCount = model.getLineCount(); lineNumber <= lineCount; lineNumber++) {
|
||||
const lineTokens = model.getLineTokens(lineNumber);
|
||||
|
||||
for (let i = 0, len = lineTokens.getCount(); i < len; i++) {
|
||||
const tokenType = lineTokens.getStandardTokenType(i);
|
||||
if (tokenType === StandardTokenType.Other) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const startOffset = offset + lineTokens.getStartOffset(i);
|
||||
const endOffset = offset + lineTokens.getEndOffset(i);
|
||||
const length = endOffset - startOffset;
|
||||
|
||||
if (length === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (lastTokenType === tokenType && lastEndOffset === startOffset) {
|
||||
result[resultLen - 2] += length;
|
||||
lastEndOffset += length;
|
||||
continue;
|
||||
}
|
||||
|
||||
result[resultLen++] = startOffset; // - lastEndOffset
|
||||
result[resultLen++] = length;
|
||||
result[resultLen++] = tokenType;
|
||||
|
||||
lastTokenType = tokenType;
|
||||
lastEndOffset = endOffset;
|
||||
}
|
||||
|
||||
offset += lineTokens.getLineContent().length + eolLength;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user