'use strict'; import { TextEditor, Uri } from 'vscode'; abstract class Comparer { abstract equals(lhs: T, rhs: T): boolean; } class UriComparer extends Comparer { equals(lhs: Uri | undefined, rhs: Uri | undefined, options: { exact?: boolean } = { exact: false }) { if (lhs === rhs) return true; if (lhs == null || rhs == null) return false; if (options.exact) { return lhs.toString() === rhs.toString(); } return lhs.scheme === rhs.scheme && lhs.fsPath === rhs.fsPath; } } class TextEditorComparer extends Comparer { equals( lhs: TextEditor | undefined, rhs: TextEditor | undefined, options: { useId: boolean; usePosition: boolean } = { useId: false, usePosition: false }, ) { if (lhs === rhs) return true; if (lhs == null || rhs == null) return false; if (options.usePosition && lhs.viewColumn !== rhs.viewColumn) return false; if (options.useId && (lhs.document != null || rhs.document != null)) { if ((lhs as any).id !== (rhs as any).id) return false; return true; } return lhs.document === rhs.document; } } const textEditorComparer = new TextEditorComparer(); const uriComparer = new UriComparer(); export { textEditorComparer as TextEditorComparer, uriComparer as UriComparer };