replace.ts ×15

Frontier kind: Code frontier

unlabeled · c_f25229c494e8

8 tests · 5107 LOC · 28 files · introduces 0 tests · 94 LOC · 2 files

Introduces — evidence that enters the hierarchy at this concept

Code
18 ranges94 lines · 2 files
Tests
0 tests

Contains — complete concept membership

All code (extent)
753 ranges5107 lines · 28 files · Browse complete extent
All tests (intent)
8 testsBrowse complete intent

Neighbourhood graph

The orange circle is the focus. Violet and green circles are every ancestor and descendant, broader and narrower, at any distance; blue squares and pink diamonds are the introduced files and exact introduced tests of every visible concept, not only the focus's. Arrows point from broader to narrower concepts and bridge only concepts omitted from this view. Undirected links show source or test introduction. Concept and file size follows LOC; exact test nodes use test-count units.

Introduced files, introduced tests, and structurally relevant concept specialization

In the embedded map, ordinary wheel input scrolls the page; use the visible controls to zoom and drag to pan. Open the full-screen map for canvas navigation: wheel pans, Ctrl/Command plus wheel zooms, and arrow keys pan when this region is focused. On touch screens, open the full-screen map to pan or pinch. If JavaScript or WebGL is unavailable, use the native relationship evidence on this page.

Introduced files, introduced tests, and structurally relevant concept specializationsearch.ts ×6 · 31 introduced LOCsearch.ts ×6replace.ts ×2 · 4 introduced LOCreplace.ts ×2replace.test|title=Replace Pattern test case operations and newline|occurrence=1 · 0 introduced LOCreplace.test|title=Repla…replace.ts ×1 · 3 introduced LOCreplace.ts ×1replace.ts ×1 · 3 introduced LOCreplace.ts ×1replace.ts ×8 · 45 introduced LOCreplace.ts ×8replace.ts ×9 · 33 introduced LOCreplace.ts ×9replace.test|title=Replace Pattern test get replace string if given text is a complete match|occurrence=1 · 0 introduced LOCreplace.test|title=Repla…replace.ts ×2 · 6 introduced LOCreplace.ts ×2replace.ts ×5 · 13 introduced LOCreplace.ts ×5replace.ts ×6 · 17 introduced LOCreplace.ts ×6replace.ts ×1 · 3 introduced LOCreplace.ts ×1replace.ts ×1 · 6 introduced LOCreplace.ts ×1replace.ts ×3 · 5 introduced LOCreplace.ts ×3replace.ts ×2 · 4 introduced LOCreplace.ts ×2replace.ts ×1 · 3 introduced LOCreplace.ts ×1replace.ts ×3 · 9 introduced LOCreplace.ts ×3replace.ts ×1 · 2 introduced LOCreplace.ts ×1replace.ts ×7 · 20 introduced LOCreplace.ts ×7replace.ts ×2 · 4 introduced LOCreplace.ts ×2replace.ts ×2 · 7 introduced LOCreplace.ts ×2strings.ts ×8 · 11 introduced LOCstrings.ts ×8strings.test|title=Strings trimWhitespace|occurrence=1 · 0 introduced LOCstrings.test|title=Strin…strings.ts ×101 · 542 introduced LOCstrings.ts ×101cancellation.test|title=CancellationToken None|occurrence=1 · 0 introduced LOCcancellation.test|title=…cancellation.ts ×18 · 90 introduced LOCcancellation.ts ×18event.ts ×93 · 864 introduced LOCevent.ts ×93uri.test|title=URI URI#file, win-speciale|occurrence=1, charCode.test|title=CharCode has good values|occurrence=1, +2 · 0 introduced LOCuri.test|title=URI URI#f…utils.ts ×3 · 9 introduced LOCutils.ts ×3linkedList.ts ×13 · 44 introduced LOClinkedList.ts ×13lifecycle.ts ×2 · 4 introduced LOClifecycle.ts ×2lifecycle.ts ×1 · 2 introduced LOClifecycle.ts ×1lifecycle.ts ×4 · 8 introduced LOClifecycle.ts ×4lifecycle.ts ×6 · 16 introduced LOClifecycle.ts ×6lazy.ts ×1 · 2 introduced LOClazy.ts ×1lazy.ts ×3 · 37 introduced LOClazy.ts ×3lifecycle.ts ×1 · 2 introduced LOClifecycle.ts ×1lifecycle.ts ×1 · 2 introduced LOClifecycle.ts ×1uint.ts ×2 · 43 introduced LOCuint.ts ×2lifecycle.ts ×1 · 3 introduced LOClifecycle.ts ×1map.ts ×97 · 3334 introduced LOCmap.ts ×97src/vs/base/common/arrays.ts · 949 LOCcommon/arrays.tssrc/vs/base/common/arraysFind.ts · 226 LOCcommon/arraysFind.tssrc/vs/base/common/assert.ts · 91 LOCcommon/assert.tssrc/vs/base/common/cache.ts · 153 LOCcommon/cache.tssrc/vs/base/common/cancellation.ts · 206 LOCcommon/cancellation.tssrc/vs/base/common/charCode.ts · 450 LOCcommon/charCode.tssrc/vs/base/common/collections.ts · 176 LOCcommon/collections.tssrc/vs/base/common/errors.ts · 357 LOCcommon/errors.tssrc/vs/base/common/event.ts · 1964 LOCcommon/event.tssrc/vs/base/common/functional.ts · 32 LOCcommon/functional.tssrc/vs/base/common/iterator.ts · 194 LOCcommon/iterator.tssrc/vs/base/common/lazy.ts · 57 LOCcommon/lazy.tssrc/vs/base/common/lifecycle.ts · 974 LOCcommon/lifecycle.tssrc/vs/base/common/linkedList.ts · 151 LOCcommon/linkedList.tssrc/vs/base/common/map.ts · 1016 LOCcommon/map.tssrc/vs/base/common/marshallingIds.ts · 33 LOCcommon/marshallingIds.tssrc/vs/base/common/path.ts · 1589 LOCcommon/path.tssrc/vs/base/common/platform.ts · 281 LOCcommon/platform.tssrc/vs/base/common/process.ts · 76 LOCcommon/process.tssrc/vs/base/common/search.ts · 48 LOCcommon/search.tssrc/vs/base/common/stopwatch.ts · 41 LOCcommon/stopwatch.tssrc/vs/base/common/strings.ts · 1413 LOCcommon/strings.tssrc/vs/base/common/types.ts · 410 LOCcommon/types.tssrc/vs/base/common/uint.ts · 59 LOCcommon/uint.tssrc/vs/base/common/uri.ts · 754 LOCcommon/uri.tssrc/vs/base/test/common/utils.ts · 107 LOCcommon/utils.tssrc/vs/nls.ts · 244 LOCvs/nls.tssrc/vs/workbench/services/search/common/replace.ts · 284 LOCcommon/replace.tscancellation.test|title=CancellationToken None|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/cancellation.test|title=CancellationToken None|occurrence=1cancellation.test|title=…charCode.test|title=CharCode has good values|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/charCode.test|title=CharCode has good values|occurrence=1charCode.test|title=Char…path.test|title=Paths (Node Implementation) path|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/path.test|title=Paths (Node Implementation) path|occurrence=1path.test|title=Paths (N…strings.test|title=Strings trimWhitespace|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/strings.test|title=Strings trimWhitespace|occurrence=1strings.test|title=Strin…uri.test|title=URI File paths containing apostrophes break URI parsing and cannot be opened #276075|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI File paths containing apostrophes break URI parsing and cannot be opened #276075|occurrence=1uri.test|title=URI File …uri.test|title=URI URI#file, win-speciale|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI URI#file, win-speciale|occurrence=1uri.test|title=URI URI#f…replace.test|title=Replace Pattern test case operations - no false positive|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test case operations - no false positive|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test case operations and newline|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test case operations and newline|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test case operations|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test case operations|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test create pattern by passing regExp|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test create pattern by passing regExp|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test get replace string for no matches|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test get replace string for no matches|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test get replace string if given text is a complete match|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test get replace string if given text is a complete match|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test get replace string if match is sub-string of the text|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test get replace string if match is sub-string of the text|occurrence=1replace.test|title=Repla…replace.test|title=Replace Pattern test parse replace string|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/services/search/test/common/replace.test|title=Replace Pattern test parse replace string|occurrence=1replace.test|title=Repla…Focused concept · replace.ts ×15 · 94 introduced LOCreplace.ts ×15

Graph controls are ready.

Interactive rendering requires JavaScript and WebGL. Use the native relationship evidence on this page while the interactive map is unavailable.

Native relationship evidence

Every exact file and test below is linked only from the concept that introduces it.

Introduced tests

Every collected test enters the hierarchy at exactly one concept.

No tests are introduced at this concept. Its intent tests are introduced by other concepts.

Introduced code

Every collected source range enters the hierarchy at exactly one concept.

2 files ranked by introduced lines: 94 introduced LOC across 18 ranges. Expand a file to inspect source; the > gutter marks introduced lines.

src/vs/workbench/services/search/common/replace.ts 84 introduced LOC · 15 ranges

Open complete file

1 > /*--------------------------------------------------------------------------------------------- replace.ts
2 > * Copyright (c) Microsoft Corporation. All rights reserved.
3 > * Licensed under the MIT License. See License.txt in the project root for license information.
4 > *--------------------------------------------------------------------------------------------*/
5 >
6 > import * as strings from '../../../../base/common/strings.js';
7 > import { IPatternInfo } from './search.js';
8 > import { CharCode } from '../../../../base/common/charCode.js';
9 > import { buildReplaceStringWithCasePreserved } from '../../../../base/common/search.js';
10 >
11 > export class ReplacePattern {
12 >
13 > private _replacePattern: string;
14 > private _hasParameters: boolean = false;
15 > private _regExp: RegExp;
16 > private _caseOpsRegExp: RegExp;
17 >
18 > constructor(replaceString: string, searchPatternInfo: IPatternInfo);
19 > constructor(replaceString: string, parseParameters: boolean, regEx: RegExp);
20 > constructor(replaceString: string, arg2: any, arg3?: any) {
21 > this._replacePattern = replaceString;
22 > let searchPatternInfo: IPatternInfo;
23 > let parseParameters: boolean;
24 > if (typeof arg2 === 'boolean') {
25 parseParameters = arg2;
26 this._regExp = arg3;
27
28 > } else { replace.ts
29 searchPatternInfo = arg2;
30 parseParameters = !!searchPatternInfo.isRegExp;
31 this._regExp = strings.createRegExp(searchPatternInfo.pattern, !!searchPatternInfo.isRegExp, { matchCase: searchPatternInfo.isCaseSensitive, wholeWord: searchPatternInfo.isWordMatch, multiline: searchPatternInfo.isMultiline, global: false, unicode: true });
32 }
33 > replace.ts
34 > if (parseParameters) {
35 > this.parseReplaceString(replaceString);
36 > }
37 >
38 > if (this._regExp.global) {
39 this._regExp = strings.createRegExp(this._regExp.source, true, { matchCase: !this._regExp.ignoreCase, wholeWord: false, multiline: this._regExp.multiline, global: false });
40 }
41 > replace.ts
42 > this._caseOpsRegExp = new RegExp(/([\s\S]*?)((?:\\[uUlL])+?|)(\$[0-9]+)([\s\S]*?)/g);
43 > }
44 >
45 > get hasParameters(): boolean {
46 return this._hasParameters;
47 }
48 > replace.ts
49 > get pattern(): string {
50 return this._replacePattern;
51 }
52 > replace.ts
53 > get regExp(): RegExp {
54 return this._regExp;
55 }
56 > replace.ts
57 > /**
58 > * Returns the replace string for the first match in the given text.
59 > * If text has no matches then returns null.
60 > */
61 > getReplaceString(text: string, preserveCase?: boolean): string | null {
62 this._regExp.lastIndex = 0;
63 const match = this._regExp.exec(text);
75 return null;
76 }
77 > replace.ts
78 > /**
79 > * replaceWithCaseOperations applies case operations to relevant replacement strings and applies
80 > * the affected $N arguments. It then passes unaffected $N arguments through to string.replace().
81 > *
82 > * \u => upper-cases one character in a match.
83 > * \U => upper-cases ALL remaining characters in a match.
84 > * \l => lower-cases one character in a match.
85 > * \L => lower-cases ALL remaining characters in a match.
86 > */
87 > private replaceWithCaseOperations(text: string, regex: RegExp, replaceString: string): string {
88 // Short-circuit the common path.
89 if (!/\\[uUlL]/.test(replaceString)) {
153 return text.replace(regex, newReplaceString);
154 }
155 > replace.ts
156 > public buildReplaceString(matches: string[] | null, preserveCase?: boolean): string {
157 if (preserveCase) {
158 return buildReplaceStringWithCasePreserved(matches, this._replacePattern);
161 }
162 }
163 > replace.ts
164 > /**
165 > * \n => LF
166 > * \t => TAB
167 > * \\ => \
168 > * $0 => $& (see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter)
169 > * everything else stays untouched
170 > */
171 > private parseReplaceString(replaceString: string): void {
172 > if (!replaceString || replaceString.length === 0) {
173 return;
174 }
175 > replace.ts
176 > let substrFrom = 0, result = '';
177 > for (let i = 0, len = replaceString.length; i < len; i++) {
178 > const chCode = replaceString.charCodeAt(i);
179 >
180 > if (chCode === CharCode.Backslash) {
181
182 // move to next char
211 }
212 }
213 > replace.ts
214 > if (chCode === CharCode.DollarSign) {
215
216 // move to next char
269 }
270 }
271 > } replace.ts
272 >
273 > if (substrFrom === 0) {
274 // no replacement occurred
275 return;
277
278 this._replacePattern = result + replaceString.substring(substrFrom);
279 > } replace.ts
280 >
281 > private between(value: number, from: number, to: number): boolean {
282 return from <= value && value <= to;
283 }
284 > } replace.ts
src/vs/base/common/search.ts 10 introduced LOC · 3 ranges

Open complete file

1 > /*--------------------------------------------------------------------------------------------- search.ts
2 > * Copyright (c) Microsoft Corporation. All rights reserved.
3 > * Licensed under the MIT License. See License.txt in the project root for license information.
4 > *--------------------------------------------------------------------------------------------*/
5 >
6 > import * as strings from './strings.js';
7 >
8 > export function buildReplaceStringWithCasePreserved(matches: string[] | null, pattern: string): string {
9 if (matches && (matches[0] !== '')) {
10 const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-');
31 }
32 }
33 > search.ts
34 function validateSpecificSpecialCharacter(matches: string[], pattern: string, specialCharacter: string): boolean {
35 const doesContainSpecialCharacter = matches[0].indexOf(specialCharacter) !== -1 && pattern.indexOf(specialCharacter) !== -1;
36 return doesContainSpecialCharacter && matches[0].split(specialCharacter).length === pattern.split(specialCharacter).length;
37 }
38 > search.ts
39 function buildReplaceStringForSpecificSpecialCharacter(matches: string[], pattern: string, specialCharacter: string): string {
40 const splitPatternAtSpecialCharacter = pattern.split(specialCharacter);