strings.ts ×16

Frontier kind: Code frontier

unlabeled · c_2aea4560ca56

5 tests · 5206 LOC · 27 files · introduces 0 tests · 46 LOC · 2 files

Introduces — evidence that enters the hierarchy at this concept

Code
19 ranges46 lines · 2 files
Tests
0 tests

Contains — complete concept membership

All code (extent)
772 ranges5206 lines · 27 files · Browse complete extent
All tests (intent)
5 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 specializationJavaScript Enriching the hover|occurrence=1 · 0 introduced LOCJavaScript Enriching the…JavaScript Issue #86176|occurrence=1 · 0 introduced LOCJavaScript Issue #86176|…indentation.ts ×4 · 41 introduced LOCindentation.ts ×4strings.ts ×1 · 2 introduced LOCstrings.ts ×1cursorColumns.ts ×1 · 33 introduced LOCcursorColumns.ts ×1strings.ts ×12 · 42 introduced LOCstrings.ts ×12cursorColumns.ts ×1 · 14 introduced LOCcursorColumns.ts ×1strings.ts ×3 · 10 introduced LOCstrings.ts ×3cursorColumns.ts ×1 · 2 introduced LOCcursorColumns.ts ×1cursorColumns.ts ×9 · 70 introduced LOCcursorColumns.ts ×9strings.ts ×6 · 16 introduced LOCstrings.ts ×6strings.test|title=Strings issue #115221: isEmojiImprecise misses ⭐|occurrence=1 · 0 introduced LOCstrings.test|title=Strin…strings.ts ×1 · 1 introduced LOCstrings.ts ×1strings.ts ×2 · 4 introduced LOCstrings.ts ×2strings.ts ×2 · 7 introduced LOCstrings.ts ×2strings.ts ×1 · 2 introduced LOCstrings.ts ×1strings.ts ×1 · 46 introduced LOCstrings.ts ×1strings.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/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/editor/common/commands/shiftCommand.ts · 278 LOCcommands/shiftCommand.tssrc/vs/editor/common/core/cursorColumns.ts · 149 LOCcore/cursorColumns.tssrc/vs/editor/common/languages/supports/indentRules.ts · 83 LOCsupports/indentRules.tssrc/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.ts · 323 LOCtokens/tokenizerSyntaxTo…src/vs/editor/contrib/indentation/common/indentation.ts · 115 LOCcommon/indentation.tssrc/vs/nls.ts · 244 LOCvs/nls.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 isFullWidthCharacter|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/strings.test|title=Strings isFullWidthCharacter|occurrence=1strings.test|title=Strin…strings.test|title=Strings issue #115221: isEmojiImprecise misses ⭐|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/strings.test|title=Strings issue #115221: isEmojiImprecise misses ⭐|occurrence=1strings.test|title=Strin…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…cursorColumns.test|title=CursorColumns columnFromVisibleColumn|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/common/core/cursorColumns.test|title=CursorColumns columnFromVisibleColumn|occurrence=1cursorColumns.test|title…cursorColumns.test|title=CursorColumns nextRenderTabStop|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/common/core/cursorColumns.test|title=CursorColumns nextRenderTabStop|occurrence=1cursorColumns.test|title…cursorColumns.test|title=CursorColumns visibleColumnFromColumn|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/common/core/cursorColumns.test|title=CursorColumns visibleColumnFromColumn|occurrence=1cursorColumns.test|title…JavaScript Enriching the hover|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/codeEditor/test/node/autoindent.test|title=Auto-Reindentation - TypeScript/JavaScript Enriching the hover|occurrence=1JavaScript Enriching the…JavaScript Issue #29886|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/codeEditor/test/node/autoindent.test|title=Auto-Reindentation - TypeScript/JavaScript Issue #29886|occurrence=1JavaScript Issue #29886|…JavaScript Issue #86176|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/workbench/contrib/codeEditor/test/node/autoindent.test|title=Auto-Reindentation - TypeScript/JavaScript Issue #86176|occurrence=1JavaScript Issue #86176|…Focused concept · strings.ts ×16 · 46 introduced LOCstrings.ts ×16

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: 46 introduced LOC across 19 ranges. Expand a file to inspect source; the > gutter marks introduced lines.

src/vs/base/common/strings.ts 42 introduced LOC · 16 ranges

Open complete file

546
547 public get offset(): number {
548 > return this._offset; strings.ts
549 > }
550
551 constructor(str: string, offset: number = 0) {
556
557 public setOffset(offset: number): void {
558 > this._offset = offset; strings.ts
559 > }
560
561 public prevCodePoint(): number {
581
582 public get offset(): number {
583 > return this._iterator.offset; strings.ts
584 > }
585
586 constructor(str: string, offset: number = 0) {
587 > this._iterator = new CodePointIterator(str, offset); strings.ts
588 > }
589
590 public nextGraphemeLength(): number {
591 > const graphemeBreakTree = GraphemeBreakTree.getInstance(); strings.ts
592 > const iterator = this._iterator;
593 > const initialOffset = iterator.offset;
594 >
595 > let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(iterator.nextCodePoint());
596 > while (!iterator.eol()) {
597 > const offset = iterator.offset;
598 > const nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(iterator.nextCodePoint());
599 > if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {
600 > // move iterator back
601 > iterator.setOffset(offset);
602 > break;
603 > }
604 graphemeBreakType = nextGraphemeBreakType;
605 }
606 > return (iterator.offset - initialOffset); strings.ts
607 > }
608
609 public prevGraphemeLength(): number {
627
628 public eol(): boolean {
629 > return this._iterator.eol(); strings.ts
630 > }
631 }
632
997 }
998
999 > function breakBetweenGraphemeBreakType(breakTypeA: GraphemeBreakType, breakTypeB: GraphemeBreakType): boolean { strings.ts
1000 > // http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules
1001 >
1002 > // !!! Let's make the common case a bit faster
1003 > if (breakTypeA === GraphemeBreakType.Other) {
1004 > // see https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakTest-13.0.0d10.html#table
1005 > return (breakTypeB !== GraphemeBreakType.Extend && breakTypeB !== GraphemeBreakType.SpacingMark);
1006 > }
1007
1008 // Do not break between a CR and LF. Otherwise, break before and after controls.
1015 }
1016 }
1017 > if (breakTypeA === GraphemeBreakType.Control || breakTypeA === GraphemeBreakType.CR || breakTypeA === GraphemeBreakType.LF) { strings.ts
1018 return true; // GB4
1019 }
1020 > if (breakTypeB === GraphemeBreakType.Control || breakTypeB === GraphemeBreakType.CR || breakTypeB === GraphemeBreakType.LF) { strings.ts
1021 return true; // GB5
1022 }
1031 }
1032 }
1033 > if (breakTypeA === GraphemeBreakType.LV || breakTypeA === GraphemeBreakType.V) { strings.ts
1034 if (breakTypeB === GraphemeBreakType.V || breakTypeB === GraphemeBreakType.T) {
1035 return false; // GB7
1036 }
1037 }
1038 > if (breakTypeA === GraphemeBreakType.LVT || breakTypeA === GraphemeBreakType.T) { strings.ts
1039 if (breakTypeB === GraphemeBreakType.T) {
1040 return false; // GB8
1044 // Do not break before extending characters or ZWJ.
1045 // GB9 × (Extend | ZWJ)
1046 > if (breakTypeB === GraphemeBreakType.Extend || breakTypeB === GraphemeBreakType.ZWJ) { strings.ts
1047 return false; // GB9
1048 }
1061 // Do not break within emoji modifier sequences or emoji zwj sequences.
1062 // GB11 \p{Extended_Pictographic} Extend* ZWJ × \p{Extended_Pictographic}
1063 > if (breakTypeA === GraphemeBreakType.ZWJ && breakTypeB === GraphemeBreakType.Extended_Pictographic) { strings.ts
1064 // Note: we are not implementing the rule entirely here to avoid introducing states
1065 return false; // GB11
1068 // GB12 sot (RI RI)* RI × RI
1069 // GB13 [^RI] (RI RI)* RI × RI
1070 > if (breakTypeA === GraphemeBreakType.Regional_Indicator && breakTypeB === GraphemeBreakType.Regional_Indicator) { strings.ts
1071 // Note: we are not implementing the rule entirely here to avoid introducing states
1072 return false; // GB12 & GB13
1124 // !!! Let's make 7bit ASCII a bit faster: 32..126
1125 if (codePoint < 127) {
1126 > return GraphemeBreakType.Other; strings.ts
1127 > }
1128
1129 const data = this._data;
src/vs/editor/common/core/cursorColumns.ts 4 introduced LOC · 3 ranges

Open complete file

26
27 private static _nextVisibleColumn(codePoint: number, visibleColumn: number, tabSize: number): number {
28 > if (codePoint === CharCode.Tab) { cursorColumns.ts
29 return CursorColumns.nextRenderTabStop(visibleColumn, tabSize);
30 }
31 > if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) { cursorColumns.ts
32 return visibleColumn + 2;
33 }
34 > return visibleColumn + 1; cursorColumns.ts
35 > }
36
37 /**