Skip to content

Commit

Permalink
Merge branch 'main' into tyriar/210663
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyriar committed Apr 18, 2024
2 parents 659cc37 + 3be6cd6 commit a062004
Show file tree
Hide file tree
Showing 31 changed files with 1,056 additions and 551 deletions.
83 changes: 83 additions & 0 deletions src/vs/base/common/equals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,86 @@ export function equalsIfDefined<T>(v1: T | undefined, v2: T | undefined, equals:
}
return equals(v1, v2);
}

/**
* Drills into arrays (items ordered) and objects (keys unordered) and uses strict equality on everything else.
*/
export function structuralEquals<T>(a: T, b: T): boolean {
if (a === b) {
return true;
}

if (Array.isArray(a) && Array.isArray(b)) {
if (a.length !== b.length) {
return false;
}
for (let i = 0; i < a.length; i++) {
if (!structuralEquals(a[i], b[i])) {
return false;
}
}
return true;
}

if (Object.getPrototypeOf(a) === Object.prototype && Object.getPrototypeOf(b) === Object.prototype) {
const aObj = a as Record<string, unknown>;
const bObj = b as Record<string, unknown>;
const keysA = Object.keys(aObj);
const keysB = Object.keys(bObj);
const keysBSet = new Set(keysB);

if (keysA.length !== keysB.length) {
return false;
}

for (const key of keysA) {
if (!keysBSet.has(key)) {
return false;
}
if (!structuralEquals(aObj[key], bObj[key])) {
return false;
}
}

return true;
}

return false;
}

/**
* `getStructuralKey(a) === getStructuralKey(b) <=> structuralEquals(a, b)`
* (assuming that a and b are not cyclic structures and nothing extends globalThis Array).
*/
export function getStructuralKey(t: unknown): string {
return JSON.stringify(toNormalizedJsonStructure(t));
}

let objectId = 0;
const objIds = new WeakMap<object, number>();

function toNormalizedJsonStructure(t: unknown): unknown {
if (Array.isArray(t)) {
return t.map(toNormalizedJsonStructure);
}

if (t && typeof t === 'object') {
if (Object.getPrototypeOf(t) === Object.prototype) {
const tObj = t as Record<string, unknown>;
const res: Record<string, unknown> = Object.create(null);
for (const key of Object.keys(tObj).sort()) {
res[key] = toNormalizedJsonStructure(tObj[key]);
}
return res;
} else {
let objId = objIds.get(t);
if (objId === undefined) {
objId = objectId++;
objIds.set(t, objId);
}
// Random string to prevent collisions
return objId + '----2b76a038c20c4bcc';
}
}
return t;
}
12 changes: 6 additions & 6 deletions src/vs/editor/standalone/browser/standaloneServices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import 'vs/editor/browser/services/hoverService/hoverService';
import * as strings from 'vs/base/common/strings';
import * as dom from 'vs/base/browser/dom';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { Emitter, Event } from 'vs/base/common/event';
import { Emitter, Event, IValueWithChangeEvent, ValueWithChangeEvent } from 'vs/base/common/event';
import { ResolvedKeybinding, KeyCodeChord, Keybinding, decodeKeybinding } from 'vs/base/common/keybindings';
import { IDisposable, IReference, ImmortalReference, toDisposable, DisposableStore, Disposable, combinedDisposable } from 'vs/base/common/lifecycle';
import { OS, isLinux, isMacintosh } from 'vs/base/common/platform';
Expand Down Expand Up @@ -88,7 +88,7 @@ import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage';
import { DefaultConfiguration } from 'vs/platform/configuration/common/configurations';
import { WorkspaceEdit } from 'vs/editor/common/languages';
import { AccessibilitySignal, IAccessibilitySignalService, Sound } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService';
import { AccessibilitySignal, AccessibilityModality, IAccessibilitySignalService, Sound } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService';
import { LogService } from 'vs/platform/log/common/logService';
import { getEditorFeatures } from 'vs/editor/common/editorFeatures';
import { onUnexpectedError } from 'vs/base/common/errors';
Expand Down Expand Up @@ -1079,6 +1079,10 @@ class StandaloneAccessbilitySignalService implements IAccessibilitySignalService
async playSignals(cues: AccessibilitySignal[]): Promise<void> {
}

getEnabledState(signal: AccessibilitySignal, userGesture: boolean, modality?: AccessibilityModality | undefined): IValueWithChangeEvent<boolean> {
return ValueWithChangeEvent.const(false);
}

isSoundEnabled(cue: AccessibilitySignal): boolean {
return false;
}
Expand All @@ -1091,10 +1095,6 @@ class StandaloneAccessbilitySignalService implements IAccessibilitySignalService
return Event.None;
}

onAnnouncementEnabledChanged(cue: AccessibilitySignal): Event<void> {
return Event.None;
}

async playSound(cue: Sound, allowManyInParallel?: boolean | undefined): Promise<void> {
}
playSignalLoop(cue: AccessibilitySignal): IDisposable {
Expand Down
1 change: 1 addition & 0 deletions src/vs/platform/accessibility/common/accessibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,4 @@ export function isAccessibilityInformation(obj: any): obj is IAccessibilityInfor
&& (typeof obj.role === 'undefined' || typeof obj.role === 'string');
}

export const ACCESSIBLE_VIEW_SHOWN_STORAGE_PREFIX = 'ACCESSIBLE_VIEW_SHOWN_';

0 comments on commit a062004

Please sign in to comment.